PHP取消设置会话变量

bbo*_*sbo 42 php session

我是一个noob程序员,所以我提前为任何明显的错误道歉.过去一周我一直在创建一个产品数据库.我已经明白我可以使用表单添加产品,查看所有添加的产品等.我正在使用通过表单输入数据创建的会话.我正在努力将删除产品页面包含在内,我尝试使用unset来清除变量,但是不能让它工作得太好.

ADD Product页面,用于设置会话变量:

$_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.
Run Code Online (Sandbox Code Playgroud)

正确方向的任何一点将不胜感激!

Tha*_*lan 80

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

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

要知道使用session_unset和之间的区别session_destroy,请阅读此SO答案.这有帮助.

  • 仅对不使用 $_SESSION 的较旧的已弃用代码使用 session_unset()。 (2认同)

Don*_*n D 12

取消设置是一个功能.因此,您必须提交必须销毁的变量.

unset($var);
Run Code Online (Sandbox Code Playgroud)

在你的情况下

unset ($_SESSION["products"]);
Run Code Online (Sandbox Code Playgroud)

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

session_destroy ();
Run Code Online (Sandbox Code Playgroud)

  • 在这里挑剔:`unset`是一种语言结构,*不是*一种功能. (3认同)

JRs*_*Rsz 5

如果您完全想清除会话,则可以使用以下命令:

session_unset();
session_destroy();
Run Code Online (Sandbox Code Playgroud)

实际上,两者都不是必需的,但不会造成伤害。

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

unset($_SESSION['Products']);
//or
$_SESSION['Products'] = "";
Run Code Online (Sandbox Code Playgroud)

根据您的需要。


小智 5

如果有人出于与我相同的原因来访问此页面,我将提供此答案。我只是在浪费大量时间来寻找问题所在。我在打电话:

unset($_SESSION['myVar']);
Run Code Online (Sandbox Code Playgroud)

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

session_start();
Run Code Online (Sandbox Code Playgroud)

除非首先启动会话,否则取消会话var无效。