Поддерживать PHP session_start () с куки - PullRequest
3 голосов
/ 19 июля 2011

У меня есть PHP-код, который запускает сеанс с использованием session_start(). Что ж, после того, как пользователь вошел в систему, он заносится в файл profile.php, который показывает информацию о нем. Но когда пользователь перезагружает страницу, сеанс пропадает. Можно ли, например, выдержать час? Я пробовал куки, но я не знаю, как сказать PHP, что сессия уже запущена. Спасибо!

Код Profile.php для файлов cookie и начала сеанса:

if(isset($HTTP_COOKIE_VARS['session'])){ 
     session_start();
} else {
    header('Location: index.php');
}

Код входа:

session_start();

$_SESSION['pass']  = $password;
header('Location: ../profile.php');
setcookie("session","1",time()+3600,"/");

Код, который проверяет сеанс:

if($_SESSION['pass'] == $tableArray[0]['password']) {
    $username = $tableArray[0]['name'];
    $avatar = $tableArray[0]['avatar'];
} else {
    header('Location: index.php');
}

Я вызывал session_destroy () здесь:

<li><a href=<?php session_destroy(); echo "index.php"?>>Logout</a></li>

И забыл, что PHP работает до HTML: P в этом была проблема!

Ответы [ 5 ]

3 голосов
/ 19 июля 2011
  • вы больше не вызываете session_start () или
  • вы вызываете session_destroy ();в любом месте файла
1 голос
/ 28 мая 2012

Технически говоря, я нашел решение для этого.

Одна вещь уже указана изменить строку пути сохранения, иначе измените разрешение каталога, в котором хранится ваша сессия.

Я сделал это, у меня получилось.

Если ваш сеанс хранится в сеансе dir, то сделайте следующее:

chmod 777 session/
0 голосов
/ 19 июля 2011

Попробуйте включить session.use_cookies (в php.ini / .htaccess)

0 голосов
/ 19 июля 2011

Вы должны сказать session_start() в верхней части каждого сценария, который должен знать данные сеанса.

Файл cookie сеанса на самом деле вас не касается, вы должны учитывать это как "деталь реализации". (Файл cookie обычно хранится в браузере пользователя до тех пор, пока браузер не закроется.)

0 голосов
/ 19 июля 2011

Я подозреваю, что вы больше не звоните session_start() на profile.php.

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

ОБНОВЛЕНИЕ после отправленного кода

Вместо проверки наличия файла cookie сеанса вместо этого сделайте что-то вроде:

// Start the session first
session_start();
if (isset($_SESSION['username'])) {
  // user is already logged in
} else {
    header('Location: index.php');
}
...