我在网上看了很多文章,但没有一篇能回答我的问题。这是一个简单的问题。我想解决这个问题:
我想抛出一条消息,指出“您的会话已过期”。但是,从未访问过我的网站并启动相同表单的用户现在也会显示错误消息,因为他的会话也是新的。
我尝试了
$_SERVER['HTTP_COOKIE']
,其中包含sessionid。如果设置了该变量,我可能会假设用户尝试继续该会话(但无法再检索它)。因此,当我开始会话并且它是空的时,我是否知道他是一位老朋友,正在尝试重新连接?
基本问题:如何区分新用户/会话和 gc 删除其会话文件后返回的用户?
谢谢,埃里克。
您可以使用 $_SESSION 和 $_COOKIE 的组合来做到这一点。
<?php
session_start();
$cookieName = 'user_id';
//Check if the session has started
//or not
if (isset($_SESSION['started'])) {
// Session exists, proceed with
//normal operation
echo "Welcome back!";
} else {
// Session does not exist, check
//if the cookie is present
if (isset($_COOKIE[$cookieName]))
{
// Cookie exists but session
//does not, meaning the session
//has expired
echo "Your session expired";
} else {
// No session and no cookie,
//it's a new user
// Set a new session and a new
//cookie
$_SESSION['started'] = true;
$uniqueId = uniqid();
//Generate a unique ID as you
//prefer
setcookie($cookieName,
$uniqueId, time() + (86400 *
30),"/"); // 30 days expiry
echo "New user";
}
}