刷新页面时,清空会话变量



为什么在重新加载页面$_SESSION变量重新设置?!

  if (isset($_SESSION['LAST_ACTIVITY']) && ((time() - $_SESSION['LAST_ACTIVITY']) > 1800)) 
            {
                // last request was more than 30 minutes ago
                session_unset();     
                session_destroy();   
            }
            $_SESSION['LAST_ACTIVITY'] = time();
if (!isset($_SESSION['CREATED'])) {
            $_SESSION['CREATED'] = time();
            } else if (time() - $_SESSION['CREATED'] > 1800) {
                // session started more than 30 minutes ago
                session_regenerate_id(true);    // change session ID for the current session and invalidate old session ID
                $_SESSION['CREATED'] = time();  // update creation time
            }

我的代码错了吗?
php.ini

session.cache_expire = 180    
session.use_cookies = 0    
session.use_only_cookies = 0   
session.auto_start = 0    
session.gc_maxlifetime = 1440   
session.cache_expire = 180

我有session_start()在页面顶部
var_dump($_SESSION)页面显示不同的$_SESSION值!!

array (size=2)  
  'LAST_ACTIVITY' => int 1472457503  
  'CREATED' => int 1472457503 

再次刷新!

array (size=2)
  'LAST_ACTIVITY' => int 1472459001
  'CREATED' => int 1472459001

变化
LAST_ACTIVITY正常但是为什么'CREATED'被改变了!!?

我的问题是session.use_cookies = 0,即会话被禁用使用cookie。
因为session使用cookie来保存SID。

所以如果cookies被禁用,session.use_trans_sid0在php.ini与页面重载session_start()生成新的会话

cookie可能会在服务器端禁用session.use_cookies = 0或用户浏览器设置。

那么如何使用会话没有cookie ?!

会话将在cookies被禁用时工作。但首先apache检查php配置设置。如:

  --enable-trans-sid
and
   --enable-track-vars

如果这些值设置为true,会话将自动通过POST传递。

如果"——enable-trans-sid"one_answers"——enable-track-vars"的值被设置为FALSE,我们需要通过使用SID常量传递会话id。

< a href="index.php?<?= SID ?>" >Navigate from here< /a >

需要设置php.ini

ini_set("session.use_cookies", 0);
ini_set("session.use_trans_sid", 1);

注意:php默认禁用 trans支持。使用transsid可能会危及用户的安全。使用此选项谨慎。用户可以通过电子邮件/irc/etc发送包含活动会话ID的URL给其他人用户可以访问您的网站使用相同的会话ID,始终使用存储在浏览器中的URL历史记录或书签。
更详细:session.use_trans_sid

最新更新