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