Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP会话过期问题_Php_Session - Fatal编程技术网

PHP会话过期问题

PHP会话过期问题,php,session,Php,Session,很抱歉,我不能就已经回答的问题提问,因为我刚刚注册 我的问题是会话到期 它工作正常,并在设定的时间后注销 我的问题是当我没有登录,我重新访问该网站,然后重定向到注销页面。我很确定这会对我的搜索引擎优化产生负面影响 这是我用过的代码 // ********************************* // // ************ SESSIONS *********** // // stops javascript from getting the session id. phpa

很抱歉,我不能就已经回答的问题提问,因为我刚刚注册

我的问题是会话到期

它工作正常,并在设定的时间后注销

我的问题是当我没有登录,我重新访问该网站,然后重定向到注销页面。我很确定这会对我的搜索引擎优化产生负面影响

这是我用过的代码

// ********************************* //
// ************ SESSIONS *********** //

// stops javascript from getting the session id. phpacademy
ini_set('session.cookie_httponly', true);

// Start the session:
session_start();

// http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) {
    // last request was more than 60 minutes ago
    session_destroy();   // destroy session data in storage
    session_unset();     // unset $_SESSION variable for the runtime
    header('Location: logged-out.php');
    }

    $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp

// http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes
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 an invalidate old session ID
    $_SESSION['CREATED'] = time(); // update creation time
    }

// stops them using proxy servers and other ip addresses.
if (isset($_SESSION['last_ip']) === false);{
    $_SESSION['last_ip'] = $_SERVER['REMOTE_ADDR'];
    }

if ($_SESSION['last_ip'] !== $_SERVER['REMOTE_ADDR']){
    session_unset();
    session_destroy();
    }   

// ************ SESSIONS *********** //
// ********************************* //
当我已经注销时,如何停止重定向到注销

我可以看到其他使用statcounter的用户出现这种情况,他们的访问页面是注销页面吗


请告知。

如php文档中关于会话的说明所述,清理/销毁会话要做的事情远不止调用
session\u unset
session\u destroy
。要永久删除会话,还必须销毁会话cookie。要做到这一点,请看


顺便说一句,在
session\u destroy
之后调用
session\u unset
没有任何作用,在调用
session\u destroy
之前应该调用
session\u unset
,因为一旦您销毁了会话,与当前会话相关的数据将不再可访问(尽管它仍然存储在您的服务器上,并且可以通过会话cookie再次访问)。

因此我认为是您的第一个条件导致了问题。您是否尝试过
var\u dump($\u会话['LAST\u ACTIVITY'))
若要查看它提供了您不期望的值,我可以想象,如果您有
$\u会话['LAST\u ACTIVITY']
比如一个空字符串值(如
time()-0
总是>1800),那么您编写时间比较的方式可能会有问题自动重定向到受保护内容的登录页面是一个好主意,自动重定向到注销页面不是一个好主意;只能在访问者真正注销后直接重定向到注销页面(按下按钮)@jeroen谢谢,我有两个注销状态,都有登录表单。只是其中一个会显示您已自动注销,谢谢您已安全注销。这两个状态都有登录表单。这仍然是一个问题吗?@MikeBrant向Mike欢呼,我已将其设置为5秒并使用它。目前,我已取消标题位置继续,以阻止他们暂时被重定向。