2012-01-31 11 views
0

Когда пользователь возвращается на мой сайт, он пытается восстановить свой последний сеанс из ассоциативного массива $_COOKIE. Он работает не так, как ожидалось. Я могу посмотреть в менеджере cookie моего браузера и увидеть, что файлы cookie есть, но они, похоже, не сохраняются в ассоциативном массиве $_SESSION.Сессия PHP, не восстанавливающаяся из файлов cookie

Это, по существу, поток программы, когда пользователь возвращается на мой сайт:

foreach ($_COOKIE as $name => $val) 
    { 
     $_SESSION[$name] = $val; 
    } 

    session_start(); 

    ... 

    $some_var = $_SESSION[$var_name]; 

У меня есть вещи из строя, или я не должен быть перезапись PHPSESSID? Любое понимание того, что я делаю неправильно, будет оценено по достоинству. Благодарю.

+3

Вы это совершенно неправильно. * Единственное, что вам нужно сделать, это вызвать 'session_start()' - забудьте о '$ _COOKIE', PHP делает все это для вас. – DaveRandom

+0

Итак, я вручную сохраняю файлы cookie ('setcookie'), а' session_start' автоматически сохраняет их обратно в ассоциативный массив '$ _SESSION'? –

+0

Вам не нужно «setcookie()' - вызов 'session_start()' автоматически устанавливает для вас файл cookie. – DaveRandom

ответ

2

Вы получаете сеансы и печенье, перемешанные. Вам не нужно вставлять вещи в массив $ _COOKIE. Просто используйте session_start(), а затем поместите вещи в $ _SESSION. PHP автоматически будет управлять сеансом/cookie для вас.

Переменные $ _COOKIE хранятся в браузере пользователей, поэтому они не защищены и могут быть подвергнуты риску пользователя =>.

$ _SESSION переменные хранятся только на сервере. Единственное, что хранится в cookie, это session_id, поэтому переменную $ _SESSION нельзя манипулировать.

Это имеет смысл?

+0

Я понимаю разницу между $ _COOKIE и $ _SESSION. Как известно PHP для восстановления данных сеанса, когда пользователь возвращается на сайт? Предположим, он в какой-то момент заходит на мой сайт, закрывает свой компьютер и возвращается на сайт на следующий день. Как узнать, как восстановить его регистрационную информацию, чтобы он не мог снова войти в систему? –

+0

Я думаю, что если вы укажете время жизни, используя 'session_set_cookie_params()', вы можете указать, как долго будет длиться сессия. По умолчанию это пока браузер не будет закрыт. Также, если вы некоторое время сохраняете сеансы, проверьте настройки сбора мусора в PHP. Даже если файл cookie действителен, PHP, возможно, удалил файл сеанса с сервера. – Mark

+0

Я решил отложить эту функцию до более поздней версии приложения. Я принимаю ваш ответ на данный момент, потому что он имеет наибольший смысл и имеет самые высокие голоса. Благодарю. –

1

Путь session_start() прежде чем что-либо еще; эта функция инициализирует данные сеанса, к которым вы будете обращаться в $_SESSION.

Не совсем уверен, что вы пытаетесь достичь с остальной частью всего этого, но session_start() первая отправная точка ...

+0

Как известно PHP для восстановления данных сеанса, когда пользователь возвращается на сайт? Предположим, он в какой-то момент заходит на мой сайт, закрывает свой компьютер и возвращается на сайт на следующий день. Как узнать, как восстановить его регистрационную информацию, чтобы он не мог снова войти в систему? –

+0

@JimFell Это не так; сеансы для сеансов браузера и файлы cookie в течение любого периода времени, в который вы их установили. Конечно, вы можете использовать их в координации друг с другом. – jcmeloni