检查是否存在会话(Nginx)

Cai*_*aio 2 php session nginx

我在PHP中有两个会话:

$_SESSION["session"]["key"] = md5 ($token . $userAgent . $ip);
$_SESSION["session"]["timeout"] = time ();
Run Code Online (Sandbox Code Playgroud)

只想检查与nginx的会话,尝试此代码但没有成功:

location / {
    if ($request_filename ~* "index.php") {
        break;
    }

    if ($http_cookie ~* "session") {
        break;
    }

    rewrite ^.+$ https://localhost/index.php last;
}
Run Code Online (Sandbox Code Playgroud)

有线索吗?

谢谢.

Rob*_*itt 6

cookie只保存会话ID,session_start();因此如果您在脚本中调用用户将始终拥有会话ID,则始终会创建一个ID.

你最好的选择是添加第二个cookie:

setcookie('session_key',md5 ($token . $userAgent . $ip));
Run Code Online (Sandbox Code Playgroud)

然后在nginx内:

if ($http_cookie ~* "session_key")
{
    break;
}
Run Code Online (Sandbox Code Playgroud)

检查是否设置了cookie.

如果哈希是敏感的,那么这样做:

setcookie('session_key_active','1');
Run Code Online (Sandbox Code Playgroud)

然后在Nginx:

if ($http_cookie ~* "session_key_active")
{
    break;
}
Run Code Online (Sandbox Code Playgroud)

但这仍然很脆弱,总是检查服务器端值匹配!