为什么我能';在php中不取消会话?

为什么我能';在php中不取消会话?,php,javascript,session,Php,Javascript,Session,我正在编写一些代码,允许用户在餐厅预订桌子。但我的客户要求我允许用户从餐厅菜单中选择一些项目,然后回来预订桌子。如果用户不想选择菜单,则可以忽略该步骤 为此,我只打印了一条消息“您想选择菜单吗?”然后是指向菜单页面的超链接。我使用iavascript onClick事件来监听用户是否单击,如果单击,我调用函数setsession来设置会话以跟踪用户在我的网站中的活动。我在页面顶部声明了我的函数- <script> function setsession(){

我正在编写一些代码,允许用户在餐厅预订桌子。但我的客户要求我允许用户从餐厅菜单中选择一些项目,然后回来预订桌子。如果用户不想选择菜单,则可以忽略该步骤

为此,我只打印了一条消息“您想选择菜单吗?”然后是指向菜单页面的超链接。我使用iavascript onClick事件来监听用户是否单击,如果单击,我调用函数setsession来设置会话以跟踪用户在我的网站中的活动。我在页面顶部声明了我的函数-

    <script>
    function setsession(){
    <?php $_session['reservation']= TRUE;
    }
    </script>
<form action="" method="post">
    <p>Do you want to choose menu? Then <a href="somepage.php" onClick="setsession()">Click here.</a></p>
<p>rest of my code</p>
<p>confirm to reserve.</p>
<a href="javascript:{}" onclick="return Validate();submitform();">Confirm</a>
</form>

<?php if(isset($addnew) && !$error) ?>
<div class="success">
<p>sucess</p>
<?php $_SESSION['reservationprocess'] = FALSE;?>
</div>
<?php } ?>

函数setsession(){
成功

一切正常。当我单击超链接时,我的会话变量成功。当我单击确认按钮(上面的超链接)时,它成功地将数据存储在数据库中,并拉取消息success并取消会话


但问题是我不知道我的会话是如何以及为什么再次设置的。我曾多次尝试取消设置会话,但失败了。据我所知,我的其余代码运行良好,没有问题。我已经测试过了。专家们有什么解决方案吗?提前谢谢。

这很不自然,但要破坏会话,你需要确保e在手之前调用了
session\u start()

要销毁会话,您不能在该JavaScript函数中执行。您需要向服务器发出HTTP请求,然后该请求需要触发删除会话的“PHP”函数

通过阅读您在下面帖子上的评论,我假设您只想删除会话的一个变量。可以尝试以下操作:

session_start();
unset($_SESSION['reservationprocess']);

会话必须初始化(如果之前没有初始化),会话启动()就可以了,另一个技巧是使用会话销毁()istead unset。

这里应该做的是移动此调用:

<?php $_session['reservation']= TRUE;?>


..到您的菜单页。因此,当菜单页加载此会话时,将设置此会话。完成后,您可以使用会话_destroy()取消设置变量.

我不知道为什么你在脚本中没有任何原因地使用会话变量。第二,我想当你加载页面时,你的变量被分配了,这可能是它再次设置的原因。当你初始化或分配变量时,请进行某种检查。

很抱歉再次打扰你。但是这次不是问一些新手问题,而是回答我自己的问题

首先,我将简要地写下我的问题。我想捕捉一个事件,并想使用该事件在我的会话中存储一些值,以便在我的站点的其余部分识别该事件,除非会话被某种方式破坏。 php文件中使用的所有变量都将值存储在其中,并在服务器上执行所有操作。浏览器会显示结果。当用户[在我的例子中单击]时,我们怎么能期望这样的结果它只需将一个值存储在php变量中,而浏览器中没有php变量。因此,我们可以做的只是将结果存储在javascript变量中,或者返回服务器并将值设置为该变量。 使用ajax调用服务器是一种专家的方法,老实说,我对它了解不多。所以我需要寻找一些我已经知道的东西。当然是基于php的。最后我得到了COOKIE。 为了捕获事件,显然要使用javascript。我使用了一个使用jQuery的事件侦听器,在其中我将一个值存储在浏览器的cookie中。然后使用javascript和php在我的网站中检查cookie。
这有一个回退。如果用户禁用cookie,则您将无法使用它。

您是否调用了
会话\u start()
在页面顶部?是的。我的网站有一个登录系统。有几件事。在呈现javascript之前,PHP会在服务器上进行评估。我不确定你是否可以根据javascript条件更新PHP变量。其次,你的第一个@Matt-有些人编写PHP时故意没有最后的结束标记。在某些情况下,它可以防止ugs与非故意输出有关。在某些情况下,这被认为是一种最佳做法。@SureralStreams,我知道PHP中的结束标记引起的错误,特别是在CMS系统中。在这种情况下有什么好处?如果PHP没有启动会话,它怎么知道要销毁哪个会话?这就是为什么必须首先启动它。From javascript只需要删除PHPSID cookie。我不想破坏所有会话,因为我需要登录系统才能工作。我只想取消设置此$u会话['reservationprocess']变量。谢谢。感谢每一个人。我发现了我的问题出在哪里。我试图设置会话,但它不在服务器中,它已经在我的浏览器中。这就是为什么我尝试了这么多,我无法设置它的值。唯一能做的方法是,通过ajax。我正在处理它。当我得到我的答案时,我会与大家分享。谢谢。但我需要将此会话设置为仅当用户单击“我的链接”时。那么你说菜单页可以从网站的其他部分访问吗?你可以向$\u POST数组中添加一个隐藏字段,指定此链接已单击,然后设置会话变量。你可以按自己的意愿执行。只是说我不会按你的方式执行。