【发布时间】:2011-04-28 16:02:41
【问题描述】:
到目前为止,我有以下打开会话(php),
session_start() ;
foreach($_SESSION as $key => $value){
$alert .= '<br/>' . '['.$key.']='.$value ;
}
$alert .= '<br/>$_SERVER[MY_SERVER...]='.$_SERVER['MY_SERVER_GENERATED'] ;
if($_SESSION['MY_SERVER_GENERATED'] !== true ||
$_SERVER['REMOTE_ADDR'] !== $_SESSION['PREV_REMOTEADDR'] ||
$_SERVER['HTTP_USER_AGENT'] !== $_SESSION['PREV_USERAGENT']){
$alert .= 'session destroyed' ;
session_destroy() ;
}
if(isset($_SESSION['CREATED']) && (strtotime('now') - $_SESSION['CREATED']) > 300){//Delete expired sessions - seconds
$alert .= '<div class="error_box">Your session has expired!</div>' ;
$_SESSION = array() ;
}
session_regenerate_id();
$_SESSION['CREATED'] = strtotime('now') ;
$_SESSION['MY_SERVER_GENERATED'] = true ;
$_SESSION['PREV_USERAGENT'] = $_SERVER['HTTP_USER_AGENT'] ;
$_SESSION['PREV_REMOTEADDR'] = $_SERVER['REMOTE_ADDR'] ;
echo $alert ;
问题是会话每次都被销毁。 $_SESSION 只是空的。什么时候可以运行上述检查?
糟糕,忘记指定我已验证会话正在保存数据,但直到页面启动后才进行。因此会话被破坏,因为 $_SESSION 数据全部为空,因此条件评估为假。例如,$alert 不会注册为其中存储了任何内容。
【问题讨论】:
-
尝试检查 php.ini 中的 session_lifetime