只是想知道如何检查 PHP 会话是否存在......我的理解是,无论如何,如果我使用会话,我必须使用 session_start() 启动我的文件才能访问会话,即使我知道它已经存在.
我已阅读用户 session_id() 以了解是否存在会话,但由于我必须在调用 session_id() 之前使用 session_start(),并且如果没有会话,session_start() 将创建一个新 ID,如何我可以检查会话是否存在吗?
在 5.4 之前的 PHP 版本中,您可以只使用以下session_id()
函数:
$has_session = session_id() !== '';
在 PHP 5.4+ 版本中,您可以使用session_status()
:
$has_session = session_status() == PHP_SESSION_ACTIVE;
isset($_SESSION)
应该是这样的。如果您想检查是否存在单个会话变量,请使用if(isset($_SESSION['variablename']))
.
我发现最好(取决于应用程序的性质)简单地测试以查看是否在客户端中设置了会话 cookie:
<?php
if (isset($_COOKIE["PHPSESSID"])) {
echo "active";
} else {
echo "don't see one";
}
?>
当然,将默认会话名称“PHPSESSID”替换为您正在使用的任何自定义名称。
在 PHP 中有一个叫做会话名称的东西。如果会话已经开始,该名称与将要设置的 cookie 相关。
$_COOKIE
因此,如果有可用的会话 cookie,您可以检查数组。Cookie 通常是与浏览器交换会话名称的会话 ID 的首选形式。
如果 cookie 已经存在,则意味着 PHP 会话已较早启动。如果没有,那么session_start()
将创建一个新的会话 id 和会话。
第二种检查方法是检查传出标头是否设置了会话的 cookie。如果它是一个新会话,它将被设置。或者如果会话 id 发生了变化。
isset($_SESSION)是不够的,因为如果session_destroy()
在同一次执行中创建和销毁会话(使用 ),isset($_SESSION)将返回true。当使用 3rd 方代码时,这种情况可能会在您不知情的情况下发生。session_id()
但是,正确返回一个空字符串,并且可以在session_start()
.
您可以在 session_start 之前调用 session_id。http://www.php.net/manual/en/function.session-id.php - 读取 id 参数
我一直只是简单地使用
if (@session_id() == "") @session_start();
还没有让我失望。
使用这个已经很久了。
注意:@
简单地抑制警告。
存放session_id
并$_SESSION
检查它。
第一次
session_start();
$_SESSION['id'] = session_id();
启动会话并存储随机给定的会话 ID。
下次
session_start();
$valid_session = isset($_SESSION['id']) ? $_SESSION['id'] === session_id() : FALSE;
if (!$valid_session) {
header('Location: login.php');
exit();
}
启动一个会话,检查当前会话 id 和存储的会话 id 是否相同(用三元 ? 作为 php 中不存在的短路 AND 的替换)。如果没有,请再次登录。
如果注意在您的 php 版本中工作,请关闭错误报告将您的 php 代码放在首位
error_reporting(0);
在调用 session_start() 之前检查会话是否存在
if(!isset($_SESSION))session_start();
我在三年前解决了这个问题,但我无意中从我的电脑上删除了文件。
它是这样的。用户必须按我想要的顺序访问的 3 个页面。
1)每个php页面
enter code here
会话的顶部start();enter code here
2) 第一页: a) enter code here
$_session["timepage1"] = 一个 php 日期函数;time() 简单易用 b) enter code here
$_session["timepage2"]= $_session["timepage1"]; b) enter code here
$_session["timepage3"]=$_session["timepage1"]; 3) 第二页:a) enter code here
$_session["timepage2"] = 一个 php 日期函数;time() 简单易用 b) enter code here
$_session["timepage3"]= $_session["timepage3"]; 3) 第三页: a) enter code here
$_session["timepage3"] = 一个php日期函数;time() 简单易用
逻辑:如果第 2 页上的 timepage3 小于 timepage3 {用户在第 2 页之前到第 3 页做某事}
如果第 2 页上的 timepage2 小于 timepage1 {用户可能试图破解第 2 页,我们希望他们在第 1 页做点什么}
timepage1 在除 page1 之外的任何页面上都不应等于 timepage2 或 timepage3,因为如果在第二页或第三页上它不是更大,则用户可能试图破解“做某事”
您可以使用 3 个 timepage1-2-3 变量通过简单的算术来完成复杂的事情。您可以重定向或发送消息说请转到第 2 页。您还可以判断用户是否跳过第 2 页。然后发送回第 2 页或第 1 页,但最好的安全功能是什么都不说,只需重定向回第 1 页。
如果你enter code here
回显 time(); 在每个页面上,在测试期间,如果您以正确的顺序访问,您将看到最后 3 位数字上升。