【问题标题】:PHP Unset Session VariablePHP取消设置会话变量
【发布时间】:2016-10-01 21:06:31
【问题描述】:

我是一个菜鸟程序员,所以对于任何明显的错误,我提前道歉。在过去的一周里,我一直在创建一个产品数据库。我也可以使用表单添加产品,查看添加的所有产品等。我正在使用通过表单输入数据创建的会话。我正在努力使删除产品页面正常工作,我尝试使用 unset 清除变量,但无法使其正常工作。

添加设置会话变量的产品页面:

$_SESSION['Products'][] = $_POST; //is how i set the session on the add products page. 

unset $_SESSION['Products'][]; //is how i have tried to clear the session although it does not work.

我们将不胜感激任何正确方向的观点!

【问题讨论】:

  • unset($_SESSION['Products']); 就够了
  • 并清除所有会话的使用 session_unset();
  • 稍微考虑一下,我认为我需要做的不仅仅是取消设置会话变量。我需要从我的产品列表页面中删除该产品的整个数组。我的坏
  • t3kz 我认为这会删除整个产品列表而不是一个,我会试一试
  • @BradleyBoothman 所以使用unset($_SESSION['Products']); 修复正确吗?

标签: php session


【解决方案1】:

您可以使用以下方法取消设置会话变量:

  1. session_unset - 释放所有会话变量(相当于使用:$_SESSION = array(); 用于旧的已弃用代码)
  2. unset($_SESSION['Products']); - 仅取消设置会话变量中的产品索引。 (记住:你必须像函数一样使用,而不是像你使用的那样)
  3. session_destroy — 销毁所有注册到会话的数据

要了解使用session_unsetsession_destroy 之间的区别,请阅读此SO answer。这有帮助。

【讨论】:

  • 只对不使用 $_SESSION 的旧代码使用 session_unset()。
  • deprecated code that does not use $_SESSION 到底是什么?除了$_SESSION 之外,还有(已弃用)在 PHP 中使用会话的方法吗?
【解决方案2】:
// set
$_SESSION['test'] = 1;

// destroy
unset($_SESSION['test']);

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
【解决方案3】:

销毁 PHP 会话

一个 PHP 会话可以被 session_destroy() 函数销毁。此函数不需要任何参数,一次调用可以破坏所有会话变量。如果要销毁单个会话变量,则可以使用 unset() 函数取消设置会话变量。

这里是取消设置单个变量的示例

<?php    unset($_SESSION['counter']); ?>

这是销毁所有会话变量的调用

<?php    session_destroy(); ?>

【讨论】:

    【解决方案4】:

    如果有人出于与我相同的原因访问此页面,我将包含此答案。我只是浪费了令人尴尬的时间试图找出问题所在。我在打电话:

    unset($_SESSION['myVar']);
    

    来自注销脚本。然后导航到需要登录的页面,服务器仍然认为我已登录。问题是注销脚本没有调用:

    session_start();
    

    除非您先启动会话,否则取消设置会话变量不起作用。

    【讨论】:

      【解决方案5】:

      Unset 是一个函数。因此,您必须提交必须销毁的变量。

      unset($var);
      

      你的情况

      unset ($_SESSION["products"]);
      

      如果您需要重置整个会话变量,只需调用

      session_destroy ();
      

      【讨论】:

      • 吹毛求疵:unset 是一种语言结构,不是一个函数。
      • 是的。它是一种语言结构。但是 php 手册本身也将 unset 归类为变量处理函数。 www.php.net/manual/en/ref.var.php。无论如何,我只需要强调应该将变量名传递给它的事实。
      • 是的,但区别就在那里。这不是一个函数。
      【解决方案6】:

      unset 是一个函数,而不是一个运算符。像unset($_SESSION['key']); 一样使用它来取消设置该会话密钥。但是,您也可以使用session_destroy();。 (确保也使用session_start(); 开始会话)

      【讨论】:

      • unset 不是一个函数,而是一个语言结构
      【解决方案7】:

      如果你完全想清除会话,你可以使用这个:

      session_unset();
      session_destroy();
      

      其实两者都不是必须的,但也无妨。

      如果您只想清除特定部分,我认为您需要这个:

      unset($_SESSION['Products']);
      //or
      $_SESSION['Products'] = "";
      

      取决于你的需要。

      【讨论】:

      • $_SESSION["XYZ"] = "";不会清除内存。变量仍然存在,isset() 仍然会返回 true
      猜你喜欢
      • 2013-02-17
      • 2014-04-03
      • 1970-01-01
      • 2023-01-23
      • 2015-03-03
      • 2013-01-17
      • 1970-01-01
      • 2010-11-04
      相关资源
      最近更新 更多