不使用session_start()检查是否有会话

问题描述 投票:0回答:4

我想检查一个人是否有活动会话,并在有活动会话时将他们重定向到另一个页面。但是,我不想使用 session_start(),因为这会在用户的 PC 上放置 cookie(我不想在人们未登录时在他们的 PC 上放置 cookie)。有没有办法检查现有会话,而不在他们的 PC 上放置 cookie?

php
4个回答
8
投票

您可以检查会话 ID cookie 是否存在,如果之前已在站点的其他位置设置过该会话 ID cookie,则客户端会将其发回:

if (isset($_COOKIE[session_name()])) {
   ... most likely there's a session available to be loaded ...
}

为了增加安全性,您可以使用

session_save_path()
session_name()
来检查会话文件是否存在(假设您使用的是默认的基于文件的处理程序),以构建传递到
file_exists()

的路径

2
投票

您可以检查函数

session_id()
,它将返回用户的当前会话 ID,或者如果不存在会话则返回空字符串:

if (empty(session_id())) {
  /* redirect or logic here here, example: */
  header('location:path/to/your/session/start/page');
  exit();
}

或者您可以检查会话 cookie/全局变量是否已设置(

isset($_SESSION)
isset($_COOKIE[session_name()]
session_id()

的文档)

2
投票

首先测试一下,但我认为如果有会话,

session_id() != ""
将给出 true,如果没有,则给出 false。


0
投票

这不是很安全,但是...

通过身份验证后执行此操作

$user_id = 123; // Replace with the actual user ID
$expiration = time() + (30 * 24 * 60 * 60); // Cookie expires in 30 days
setcookie('user_id', $user_id, $expiration, '/', '', true, true);

然后你可以像这样检查他们是否登录了

if (isset($_COOKIE['user_id'])) {
    $user_id = $_COOKIE['user_id'];
    // Use $user_id as needed
} else {
    // User ID not found in cookie, handle accordingly
}
© www.soinside.com 2019 - 2024. All rights reserved.