Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果未设置会话-重定向不';行不通_Php_Session - Fatal编程技术网

Php 如果未设置会话-重定向不';行不通

Php 如果未设置会话-重定向不';行不通,php,session,Php,Session,index.php session_start(); if (!(isset($_SESSION['admin']))) { header ('Location: login.php'); } 如果用户未登录,我想重定向该用户。 登录后(没有记住我),我关闭浏览器(Chrome)并再次打开 所有会话都应该被删除,因此我希望重定向到login.php,但它不起作用(index.php已加载)。您需要使用会话销毁功能,然后进行检查。请参阅下面的代码:- session_destroy();

index.php

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()
;他要求如果他关闭浏览器并再次打开会话,则应删除并重定向到登录。他不想手动删除会话。如果我手动销毁会话-重定向有效,但我很惊讶关闭浏览器会话不会自动销毁。是的,我将会话视为“浏览器会话”。谢谢你的解释。