2012-03-27 2 views
0

У меня есть пользователи, которые пишут статьи и когда они оставляют там компьютер некоторое время и возвращаются, затем отправляют сообщение, автор/user_id записывается как значение NULL. Я предполагаю, что сеанс истекает. У меня есть:Проблема с куки-файлом/истекающий сеанс

ob_start(); 
session_start(); 

if(isset($_SESSION['user_id'])) { 
    $ext = time() + 31560000; 
    setcookie('name', $_SESSION['user_id'], $ext); 
} 

В верхней части страницы индекса, где пользователь перенаправляется при входе в систему.

Кроме того, это то, что происходит, когда они на самом деле войти:

$user_id = get_user_id($some_variable); // get's the user_id 
$username = get_username($some_variable); // get's username 

$_SESSION['user_id'] = $user_id; 

?> 
<script type="text/javascript"> 
    window.location = 'http://site.com/<?php echo $username; ?>'; 
</script> 
<?php 
exit(); 

ли это правильно настроено, и почему сессии пользователя будут истекающие? Они не выходят из браузера, это просто бездействие. Что может быть причиной этого?

+1

Проверьте, что настройки вашей 'php.ini' [session.gc_maxlifetime] (http://www.php.net/manual/en/session.configuration. php # ini.session.gc-maxlifetime) установлено значение. Значение по умолчанию - 1440 секунд или 24 минуты. По истечении этого времени существует вероятность того, что данные сеанса будут удалены старым. – drew010

+0

Будет ли session.gc_maxlifetime = 1000000 (случайное число) правильным способом записать его в php.ini? – Graham

+0

Да, это сделало бы это глобально. Вы также можете использовать [ini_set] (http://php.net/ini_set) из своего сценария, но если вы это сделаете, вы должны убедиться, что ВСЕ ваши скрипты, которые взаимодействуют с сеансами, используют одни и те же значения. Удостоверьтесь, что он достаточно велик для ваших нужд, но не настолько большой, что вы получите массу старых данных сеанса на сервере. – drew010

ответ

1

Я не знаю, что вы пытаетесь достичь с

if(isset($_SESSION['user_id'])) { 
    $ext = time() + 31560000; 
    setcookie('name', $_SESSION['user_id'], $ext); 
    } 

Но это не увеличить срок службы PHP сессии, но только создать печенье под названием имя, которое есть $ _SESSION [ «user_id»], как значение и истекает 31560000 секунд после создания.

Если Вы хотите изменить свою жизнь сеанса см session.configuration

+0

Я смотрю на это. Какую конкретную функцию я хотел бы использовать и как ее написать? Я бы хотел установить его на 86400 секунд. просто чтобы поставить там номер. – Graham

+0

Вы можете использовать функцию ini_set http://www.php.net/manual/en/function.in-set.php или напрямую изменить php.ini. ex 'init_set ('session.gc_maxlifetime', 86400);' – grifos