首页 > 解决方案 > PHP 中的 $_SESSION:页面重新加载时未读取变量

问题描述

当我设置会话变量时,我认为它没有被读取:

<?php
if(isset($_SESSION['last_activity'])){
if( $_SESSION['last_activity'] < time()-$_SESSION['expire_time'] ) { 
   //...
}else{ 
   session_destroy();
   session_start();    
   $_SESSION['last_activity'] = time(); // setting variable
   $_SESSION['expire_time'] = 8*60*60;  // calculate exp.time
   echo "branch 1";
}
}else{  
   session_start();
   $_SESSION['last_activity'] = time(); // setting variable
   $_SESSION['expire_time'] = 8*60*60; // calculate exp.time
   echo "branch 2";
}
?>

在页面重新加载时,它始终被认为是“分支 2”。如果我放 'session_start();' 在页面顶部,每次重新加载它都会从分支 1.1 跳转到 1.2:

标签: phpsession

解决方案


您需要在第一个 if 条件之前启动会话。因为您在检查SESSION是否存在之前不启动会话

session_start(); 
if(isset($_SESSION['last_activity'])){
if( $_SESSION['last_activity'] < time()-$_SESSION['expire_time'] ) { 
   //...
}else{ 


   $_SESSION['last_activity'] = time(); 
   $_SESSION['expire_time'] = 8*60*60;  
   echo "branch 1";
   session_destroy();
}
}else{  
   $_SESSION['last_activity'] = time(); // setting variable
   $_SESSION['expire_time'] = 8*60*60; 
   echo "branch 2";
   session_destroy();
}

更新:

它足以在 if 条件之前启动会话,并且当条件进入 else 时,只需销毁它


推荐阅读