的index.php
session_start();
if (!(isset($_SESSION['admin']))) {
header ('Location: login.php');
}
如果用户没有插入,我想重定向用户。
登录后(没有remember me
),我关闭浏览器(Chrome)并再次打开它。
应删除所有会话,因此我希望重定向到login.php
,但它不起作用(index.php
已加载)。
答案 0 :(得分:1)
如果您将会话视为“浏览器会话”,那么这是令人惊讶的行为。但事实并非如此。
会话是服务器定义的会话。要记住这是同一个用户,它会将会话保存为cookie。从服务器的角度来看,关闭浏览器,关闭计算机或喝一杯咖啡并不重要:你仍然是同一个人,所以你的会话应该是一样的
只要你的cookie被保存并且不是太旧,它就是所有相同的会话。您可以从用户端尝试指示您的客户端停止此操作,例如在共享帐户上:让浏览器在退出时删除所有Cookie或使用不同的配置文件(这至少可以在chrome中使用)。
所以预期的行为是,只要cookie有效,会话就是一样的。 Cookie有效性(或实际上:删除)可以与关闭浏览器相关联,但大部分时间都不是。我不确定甚至可以直接检测浏览器是否已关闭,因此很难从服务器端强制执行您描述的行为。
编辑:从manual快速添加:
PHP中的会话支持包含一种保留某些数据的方法 跨后续访问。这使您可以构建更多自定义 应用程序并增加您的网站的吸引力。所有信息 在会话参考部分。
它谈到了“后续访问”,这是非常广泛的。
答案 1 :(得分:0)
您需要使用会话销毁功能,然后检查。请参阅以下代码: -
session_destroy();
if (!(isset($_SESSION['admin']))) {
header ('Location: login.php');
}
或另一种方法是使用未设置的功能然后检查: -
unset($_SESSION['admin']);
if (!(isset($_SESSION['admin']))) {
header ('Location: login.php');
}
要破坏会话,您可以在浏览器卸载事件中使用ajax调用: -
$(window).unload(function() {
$.get('session_destroyer.php');
});