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

时间:2016-08-29 08:36:03

标签: php session

为什么重新加载页面$_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'被改变了!! ??

1 个答案:

答案 0 :(得分:0)

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

所以如果cookies已禁用且session.use_trans_sid0,则php.ini中的页面重新加载session_start()会生成新会话。

使用session.use_cookies = 0或使用用户浏览器设置,Cookie可能会从服务器端禁用。

然后如何使用没有Cookie的会话?!

禁用cookie时,会话将起作用。但首先apache检查php配置设置。像:

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

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

如果“--enable-trans-sid”和“--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 sid支持。使用trans sid可能会给您的用户带来安全风险。使用此选项    警告 。用户可以通过email / irc / etc将包含活动会话ID的URL发送给其他人包含活动会话ID的URL可能是   存储在公共可访问的计算机中用户可以访问您的站点   使用相同的会话ID始终使用存储在浏览器中的URL   历史或书签   更多detial:session.use_trans_sid