2012-05-01 57 views
2

我正在写一些代码,以允许用户在餐厅预订餐桌。但我的客户要求我允许用户从餐厅菜单中选择一些项目,然后返回并保留表格。如果用户不想选择菜单,那么他们可能会忽略该步骤。为什么我不能在php中取消设置会话?

为此,我只是打印了一条消息“你想选择菜单吗?”然后超链接到菜单页面。我使用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 } ?> 

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

但问题是我不怎么样,为什么我的会话再次设置。我试图解除会话的次数,但是失败了。据我所知,我的代码的其余部分运行良好,没有问题。我测试过了。有没有专家的解决方案?提前致谢。

+3

您是否在页面顶部调用了'session_start()'? –

+0

是的。我的网站有一个登录系统。 – maksbd19

+1

夫妇的事情..在呈现javascript之前,PHP会在服务器上评估它。我不确定你可以根据javascript条件更新一个php变量。其次,你的第一个<?php标签没有结束标签。再次,不是我认为这很重要。 –

回答

0

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

首先,我将简要地写下我的问题。我想赶上一个事件,并希望利用该事件在我的会话中存储一些值,以便在我的站点的其余部分识别该事件,除非会话以某种方式被破坏。 在.php文件中使用的变量会在其中存储值,并在服务器上执行所有操作。浏览器显示结果。我们可以期待用户做些什么[点击我的例子],它只是在php变量中存储一个值,而浏览器中没有php变量。那么我们可以做的只是将结果存储在一个JavaScript变量中,或者返回到服务器并将值设置为变量。 使用ajax调用服务器是专家的一种方法,说实话,我不太了解它。所以我需要寻找我已经知道的东西。当然基于PHP。最后我得到了COOKIE。 要赶上事件其显而易见的使用JavaScript。我使用了一个使用jQuery的事件监听器,并在里面存储了一个值在我的浏览器的cookie中。然后使用javascript和php来检查我的网站中的cookie。 这有一个后备。如果用户禁用了cookie,那么您将无法使用它。

1

这是非常不自然的事情,但要消灭会话,您需要确保您事先调用session_start()

要破坏会话,您不能在该JavaScript函数中执行该操作。您将需要向服务器发出HTTP请求,然后这个请求将需要触发'PHP'函数删除您的会话。

从阅读您对以下帖子的评论我假设您只想删除会话的单个变量。也许试试这个:

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

如果PHP没有启动会话,它将如何知道要销毁的会话?这就是为什么你必须首先启动它。 –

+1

从JavaScript只需要删除PHPSID cookie。 – Pablo

+0

@帕布罗,酷我从来没有尝试过这种方式。 – Jack

0

会议必须初始化(如果没有初始化之前)在session_start()就行了,另一个技巧是使用session_destroy()istead未设置。

+0

我不想破坏我所有的会话,因为我需要登录系统才能工作。我只想取消设置$ _SESSION ['reservationprocess']变量。谢谢。 – maksbd19

+0

感谢每一位。我发现我的问题在哪里。当它不在服务器中时,我试图设置会话,它已经在我的浏览器中。这就是为什么我尝试过,我无法设定它的价值。只有这样我才能做到,通过ajax。我在做这个工作。当我得到我的答案时,我会与你分享。谢谢 – maksbd19

0

你应该做的下面是该呼叫转移:

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

..到菜单页面。所以当菜单页面加载这个会话设置。然后当你完成你可以用session_destroy()取消设置变量。

+0

谢谢。但只有当用户点击我的链接时,我才需要设置此会话。 – maksbd19

+0

所以你说的菜单页面可以从网站的其他部分访问?您可以将隐藏字段添加到$ _POST数组中,指定该链接是单击,然后设置会话变量。无论如何你都可以做到。只是说我不会像你这样做。 –

0

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

相关问题