【问题标题】:PHP unset session not workingPHP未设置会话不起作用
【发布时间】: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 谢谢先生您的反馈......我一定会记住这一点......

标签: php jquery ajax session


【解决方案1】:

如 cmets 中所述,您没有启动会话,并且需要在所有使用会话的文件中。

因此,在 PHP 开始标签的顶部和下方添加 session_start();

参考:

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

【讨论】:

    猜你喜欢
    • 2017-03-17
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 2014-03-09
    • 2017-03-29
    • 2013-10-18
    相关资源
    最近更新 更多