【问题标题】:At what point is session data available?会话数据在什么时候可用?
【发布时间】: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

标签: php session


【解决方案1】:

您的代码似乎有一个问题 22:

session_start() ;


if(!$_SESSION['MY_SERVER_GENERATED']){ <------- this will always be true 
                                                for a fresh session, so
    session_destroy() ;  <--------------------- this will always be executed

您的会话数据永远没有机会填充。

【讨论】:

  • @Magic 如果变量为假,则条件将匹配如果根本没有设置,这将始终为真。如果您想检查它的值 false 而不是其他的,请执行 if ($_SESSION['MY_SERVER_GENERATED'] !== false)
  • 我更新了代码以准确显示我目前拥有的内容。为此所需的所有 $_SESSION 变量都是在 regenerate_id 之后为其设置的,但每次运行代码时 $_SESSION 仍然为空。 $_SESSION 数据是否在某个特定点可用?
  • @Magic 据我所知,您似乎仍然在设置值之前破坏会话,导致值无处设置。在第一个请求中,您的第一个 if 条件将始终评估为 true
  • 好的,我根据您的回复知道了。我的错误印象是 session_regenerate_id 实际上会基于旧会话创建一个新会话,并且只会销毁旧会话。我需要的是在销毁旧会话后使用全新的 session_start。
猜你喜欢
  • 2019-11-18
  • 2012-01-04
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 2012-05-27
相关资源
最近更新 更多