如何销毁PHP中的特定会话变量?
我目前正在开发一个购物车系统。它需要用户登录才能访问购物车。因此,我编写了一些代码,在用户未登录时禁用对购物车页面的访问。但是,每当我尝试清空购物车时,我都会注销。我只想销毁购物车会话,而不是用户会话。这是我的密码: 对于购物车页面:如何销毁PHP中的特定会话变量?,php,session,Php,Session,我目前正在开发一个购物车系统。它需要用户登录才能访问购物车。因此,我编写了一些代码,在用户未登录时禁用对购物车页面的访问。但是,每当我尝试清空购物车时,我都会注销。我只想销毁购物车会话,而不是用户会话。这是我的密码: 对于购物车页面: <?php session_start(); if(isset($_SESSION['userID'])){ } elseif(!isset($_SESSION['userID'])){ echo "<scr
<?php
session_start();
if(isset($_SESSION['userID'])){
}
elseif(!isset($_SESSION['userID'])){
echo
"<script>
alert('You must be logged in.');
window.location.href='index.php#login'
</script>";
}
?>
<?php
include ('../import/layout.php');
?>
<body>
<div class="site-wrapper" id="index">
<div class="site-wrapper-inner">
<div class="cover-container">
<?php
include ('../import/nav-two.php');
?>
<!-- <div class="inner cover">
</div>
<div class="mastfoot">
<div class="inner">
<p>© 2015 Aroma Chicken House Restaurant, All Rights Reserved.
<a class="menu-item pull-right" href="#index">Back to Top</a>
</p>
</div>
</div> -->
</div>
<div id="cart">
<div class="container">
<?php
include ('../cart/index.php');
?>
</div>
</div>
</div>
</div>
</body>
那怎么办
unset($_SESSION["products"])
而不是
session_destroy()
每个用户只有一个会话。因此,没有办法破坏“特定”会话。您可以做的是删除负责显示购物车的会话内容(如上所示) 对站点1或站点2特定的所有会话变量使用unset()
unset($_SESSION['var1']);
//or
unset($_SESSION['var2']);
你可以用
unset($_SESSION["products"]);
使用
session\u destroy()
将销毁所有会话,而上面的一行将销毁特定的会话变量。您希望的是不要销毁会话,因为您希望用户保持登录状态。最好的方法是根据需要删除或覆盖购物车的变量。您可以unset($_SESSION['products')
完全删除变量,或$\u SESSION['products']=array()代码>将其重置为空购物车
在某些情况下(如果以后将购物车保存在数据库中),您可能希望使用与从购物车中删除购物车中所有项目时相同的代码…unset()
func在这种情况下很有用
session\u destroy()
func将销毁session\u destroy()
是销毁所有会话变量和unset(会话变量)
销毁特定会话变量 可以将特定会话的值设置为“null”,然后在需要时使用empty()函数检查该会话的值,或者可以将特定会话的值设置为某个值(例如0),然后使用设置值检查会话的值以执行某些操作。使用unset()而不是session_destroy()。在未设置特定变量的地方,是session\u destroy销毁所有session变量
unset($_SESSION["products"])
基本上,这里每个人的答案都是相同的,但确实unset()
函数是传递此场景的唯一方法。但是让我告诉您,unset()
函数不会破坏会话,但它会破坏$\u会话['key']
变量。注意,我提到的是变量,而不是会话
因此基本上unset()函数用于取消变量设置。
例如,请尝试以下代码
$greet = 'Hello World!';
unset($greet);
echo $greet;// output will be blank
因此,以类似的方式,如果要删除超全局变量($\会话是超全局变量),则必须使用键传递,否则会破坏所有会话。是的,您也可以通过unset()
函数销毁会话
$_SESSION['greet'] = "hello";
$_SESSION['greet2'] = "hello2";
unset($_SESSION['greet']); //only remove $_SESSION variable with key 'greet'
unset($_SESSION); //will destroy the all keys of $_SESSION variable
尽管您可以使用sesion\u destroy()
销毁所有密钥。尝试session\u destroy()@Clouds,OP只想销毁cart变量,而不是整个sessionMan。谢谢真不敢相信事情竟那么简单。我想弄清楚这件事已经有一段时间了。谢谢你为我节省了一些时间。比所有其他答案都要详细——这正是我所需要的。谢谢
$greet = 'Hello World!';
unset($greet);
echo $greet;// output will be blank
$_SESSION['greet'] = "hello";
$_SESSION['greet2'] = "hello2";
unset($_SESSION['greet']); //only remove $_SESSION variable with key 'greet'
unset($_SESSION); //will destroy the all keys of $_SESSION variable