如果没有设置会话 - redirecton不起作用

时间:2017-08-11 06:32:19

标签: php session

的index.php

session_start();
if (!(isset($_SESSION['admin']))) {
    header ('Location: login.php');
}

如果用户没有插入,我想重定向用户。
登录后(没有remember me),我关闭浏览器(Chrome)并再次打开它。

应删除所有会话,因此我希望重定向到login.php,但它不起作用(index.php已加载)。

2 个答案:

答案 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');
 });