2013-08-26 2 views
1

Итак, вот мой код, который отправляет время истечения года, если меня запомнит мой клик. И если нет, то устанавливается session_set_cookie_params() на 0. Это означает, что он должен уничтожить сеанс, когда браузер закрыт. Однако по какой-то причине это не работает.

Это моя страница Логин:

session_start(); 
if (isset($_POST['username']) && isset($_POST['password'])) { 

    if (($_POST['username'] == $user) && ($_POST['password'] == $pass)) { 

    if (isset($_POST['rememberme'])) { 
     $_SESSION['username'] = $user; 
     $_SESSION['start'] = time(); 
     $_SESSION['expire'] = $_SESSION['start'] + (60*60*24*365); 
} 
    else{ 
     $_SESSION['username'] = $user; 
     session_set_cookie_params(0); 
    } 
    header('Location: index.php'); 

} else { 
    $p->addContent('<font color = red>Wrong</font>'); 
} 
} 

Это мой указательный страницы:

session_start(); 


if (isset($_POST['rememberme'])){ 
    $user = $_SESSION['username']; 

} 
else { 
    $user = $_SESSION['username']; 
    session_set_cookie_params(0); 
} 

if ($user == null) { 
    $user = 'Guest'; 
    $logout = $p->header()->addButton('Login', 'login.php', 'a', 'home', false, false, true); 
    $logout->rel('external'); 
} 
else{ 
    $logout = $p->header()->addButton('Logout', 'logout.php', 'a', 'delete', false, false, true); 
    $logout->rel('external'); 
} 

ответ

2
.

Это довольно просто.session_set_cookie_params(0); не влияет на вашу сессию, когда вы вызываете ее после звонка session_start();.

Просто реорганизовать свой код, чтобы что-то вроде этого:

if (isset($_POST['username']) && isset($_POST['password'])) { 
    if (($_POST['username'] == $user) && ($_POST['password'] == $pass)) { 
     if (isset($_POST['rememberme'])) { 
      session_start(); 
      $_SESSION['username'] = $user; 
      $_SESSION['start'] = time(); 
      $_SESSION['expire'] = $_SESSION['start'] + (60*60*24*365); 
     } else { 
      session_set_cookie_params(0); 
      session_start(); 
      $_SESSION['username'] = $user; 
     } 
    header('Location: index.php'); 
    } else { 
     session_start(); 
     $p->addContent('<font color = red>Wrong</font>'); 
    } 
} else { 
    session_start(); 
} 

EDIT:

Это не стоит также ничего, что session_set_cookie_params работать только на текущем сценарии и должен вызываться снова каждый раз, когда вы используете session_start(). Возможно, мне было бы полезно установить cookie, чтобы указать, следует ли использовать его.

+0

darn, я думал, что это сработает. Это было похоже на меня, ха-ха. Я закрыл свой браузер, вернулся к index.php, но сеанс все еще работал. :/в значительной степени застрял здесь. –

1

Как ваш код, session_set_cookie_params() не вызывается в любом случае. Поэтому я предлагаю сделать это:

session_set_cookie_params(0); 
session_start(); 

if (isset($_POST['username']) && isset($_POST['password'])) { 
... 

Обратите внимание, что на самом деле полезно для вызова session_set_cookie_params() всегда для сессионных куков.

Сформировать новый SESSIONID при каждом изменении уровня пользователя

Для защиты приложений от злоумышленников, это абсолютно необходимо, чтобы изменить SESSIONID после каждого изменения роли пользователя:

  • Анонимный пользователь -> Помнить пользователя
  • Помнить пользователя -> анонимный пользователь
  • Помнить пользователя -> Административные вошедшего пользователя
  • ...

Таким образом, если пользователь получает вход в систему или выход из системы, пожалуйста регенерировать идентификатор сеанса так:

session_regenerate_id(true); 

Посмотрите на OWASPPHP security cheat sheet.

Session-файлы будут регулярно

удален Используя стандартную политику сеанса РНР, сеансы получить сопоставляется с обычными файлами, так называемые сеансовые-файлы. Если пользователь закрывает свой браузер, файл сеанса продолжает жить в файловой системе. Вполне вероятно, что операционная система собирается удалить файл сеанса один раз в день (ночью).

Таким образом, если пользователь возвращается через день, файл cookie sessionID указывает на файл сеанса , который может быть недоступен.

Случай публичных компьютеров

Кроме себе браузер, работающий на общественном компьютере: Если пользователь закрывает свой браузер и новый пользователь регистрируется в, другой пользователь получает автоматически регистрируется в

+0

не заставил бы сеанс закрыться на выходе браузера для всех случаев. Я не хочу этого. Я хочу, чтобы он был установлен только в 0, потому что, когда меня не помнит, мы не нажимаем. –

+0

Большое спасибо за все это, это не было необходимо. Но я прочитаю это :). –

+0

@AnujHari Добро пожаловать! Шпаргалка с защитой PHP - это ценное чтение! – SteAp