PHP未设置会话不起作用
Posted
技术标签:
【中文标题】PHP未设置会话不起作用【英文标题】:PHP unset session not working 【发布时间】:2016-07-06 07:05:13 【问题描述】:我的用于取消设置会话变量的 php 脚本不起作用。
我需要调用一个 PHP 文件 destroy.php
,其中包含从 ajax 取消设置会话变量的代码,除了会话清除之外一切正常。
我正在发布清除会话变量的代码,请指出我的错误。
jQuery 代码:
$.ajax
(
type: "POST",
url: "SubmitReview.php",
data: dataString,
cache: false,
success: function(response)
$.fn.destroySession();
$('body').animate(scrollTop:0, 500);
$('body').children(':not(div.ErrorMessageContainer)').fadeTo(500, 0.1);
$('div.ErrorMessageContainer').html(response).fadeIn(500).delay(5000).fadeOut(500);
setTimeout(function()
$('body').children(':not(div.ErrorMessageContainer)').fadeTo(500, 1);
, 5400);
setTimeout(function()
window.location.href = "Thanks.php";
, 5600);
);
$.fn.destroySession = function()
$.post("Destroy.php");
destroy.php
:
<?php
if(isset($_SESSION['MN']))
$_SESSION['MN'] = array();
unset($_SESSION['MN']);
?>
【问题讨论】:
结合会话和 ajax 有时会使会话不起作用。如果要使用ajax,请通过参数而不是使用会话。 会话开始了吗?加上$.post("Destroy.php");
和destroy.php
是 NIX 系统上的两种不同的动物。
@Fred-ii- 像一位魅力先生一样工作......非常感谢......我在想的是,当我清理会话时,为什么要再次开始会话...... .但是你的解决方案帮助了我.....谢谢吨....
@KushAcharya 不客气,干杯
@frosty 谢谢先生您的反馈......我一定会记住这一点......
【参考方案1】:
如 cmets 中所述,您没有启动会话,并且需要在所有使用会话的文件中。
因此,在 PHP 开始标签的顶部和下方添加 session_start();
。
参考:
http://php.net/manual/en/session.examples.basic.php将error reporting 添加到文件顶部,这将有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Then the rest of your code
旁注:只应在暂存阶段显示错误,而不是在生产阶段。
“为什么要再次启动会话” - 因为,
session_start();
需要驻留在文件中,即使您想取消设置它(这就是他们在 PHP.net 上构建它的方式)。
<?php
session_start();
if(isset($_SESSION['MN']))
$_SESSION['MN'] = array();
unset($_SESSION['MN']);
【讨论】:
@luweiqi hehe 感谢您修复错字。我有时打字有点太快了。我的手指得到了所有 lkasdfkfdakdsdfjajsd 哈哈。 @Fred-ii- 你太棒了先生...清除了我的疑虑...再次非常感谢您...... @KushAcharya 不客气 Kush,很高兴能帮上忙,干杯! @Fred-ii-,这很有帮助,但有一个疑问;如果我们在开头添加 session_start,那么 isset($_SESSION) 将永远为真,不是吗? @Neo 它并不总是正确的,因为它设置在一个条件语句中,if(isset($_SESSION['MN']))
根据答案中的内容。但是,如果有人要这样做,如果这是您正在谈论的内容并使用类似:$var = isset($_SESSION['var']);
那么这将有资格作为会话数组始终被视为已设置,这反过来又会失败并且不正确检查是否设置了会话数组的语法。【参考方案2】:
将 session_start() 放在第一行。
<?php
session_start();
if(isset($_SESSION['MN']))
$_SESSION['MN'] = array();
unset($_SESSION['MN']);
【讨论】:
以上是关于PHP未设置会话不起作用的主要内容,如果未能解决你的问题,请参考以下文章