离开页面时取消设置会话
Posted
技术标签:
【中文标题】离开页面时取消设置会话【英文标题】:Unset session when leaving page 【发布时间】:2012-11-10 15:33:44 【问题描述】:如何在用户离开页面时取消设置SESSION['variables']
,而不必在我网站上每个页面的顶部添加一些内容?
您周围有什么最佳实践吗?
谢谢。
编辑 我有一个设置公司和客户的向导。这包括 2 页:1 页用于公司,1 页用于客户。如果用户想为客户重复使用在公司填写的数据,他可以选中复选框,当第 1 页(公司)的表单发布时,在第 2 页(客户)这些字段会自动设置(想想字段,例如:邮政地址、街道、电话等)。用户可以随时访问第 1 页和第 2 页,因此我必须取消设置会话,否则它将继续自动填充字段。
我可以在第 2 页设置字段后取消设置会话,但是当他刷新浏览器时,字段再次变为空。这当然不是什么大问题,但是当用户转到任何其他页面(不退出浏览器并在我的网站内)时,是否有一种简单的方法可以仅取消设置这些会话?
编辑 我的代码:
公司页面:
$_SESSION['wizard2']= "true"; // used for manipulating page when entering in wizard mode
if (isset($_POST['savedata'])) // if user wants to re-use data from page1
$_SESSION['savedata'] = "true";
$_SESSION['custprovincesession']=mysql_real_escape_string($_POST['compprovince']);
header("Location:customer_page.php");
exit();
客户页面:
if (isset($_SESSION['wizard2'])) // used for manipulating page when entering in wizard
unset ($_SESSION['wizard2']);
if (isset($_SESSION['savedata'])) // if user wants to re-use data from page1
$_SESSION['wizard3'] = "true";
<tr>
<th><label for="custprovince">Province:</label></th>
<th><input type="text" name="custprovince" style=width:200px id="custprovince" size="8" value="<?php if (isset($_SESSION['wizard3'])) echo $_SESSION['custprovincesession'];?>"/></th>
<th> </th>
<th> </th>
</tr>
在第 2 页的末尾:
if (isset($_SESSION['wizard3']))
unset ($_SESSION['wizard3']);
unset ($_SESSION['custprovincesession']);
因此,通过刷新页面可以取消设置会话。当用户离开“customer_page.php”时,有没有其他方法可以取消这些会话?
【问题讨论】:
您还可以在页面底部添加未设置的会话。你有什么要求? 页面底部是我现在所拥有的。但是刷新时,这些会话未设置。仅在离开该特定页面时取消设置会话可能对我的其他页面派上用场。 (PS。见我的编辑) 你想使用 js 还是 jquery 以获得更好的结果? 【参考方案1】:这可能是一个愚蠢的问题,但为什么要取消设置每个页面上的某些会话变量?
当然,会话的目的是在页面视图中持续存在,因此您只想在特定触发点(例如用户退出系统)取消设置或清除它。
为了回答这个问题,许多框架通常会为所有脚本使用单个入口点,该入口点会执行任何初始化,将实际页面工作转移到控制器,然后返回到单个入口点。如果您使用这种方法,那么您可以将任何关闭逻辑放在页面末尾。
【讨论】:
【参考方案2】:如果我正确理解了这个问题,那么我实际上不会使用会话,而是依赖页面之间的 POST 变量。
我相信您想要做的只是在您直接从公司页面进入客户页面(或者可能反过来?)时保留某些表单字段。当用户直接或稍后访问客户页面时,需要清除字段。
在这种情况下,您只需确保在提交表单时发布到其他页面并从 REQUEST 中收集数据。
如果您实际上是在其他地方发布表单(以处理添加公司),然后转发到客户的表单页面,那么您可以发布隐藏表单,也可以重新安排您的工作流程,以便在最后完成公司和客户的插入。
【讨论】:
是的,我虽然一秒钟是解决方案,但忘记了我正在使用标题。实际上,我从 company_page 转到 company_lists(执行查询以添加公司),然后重新返回 company_lists,检查是否输入了向导模式,然后转到 customer_page,在其中自动选择添加的公司链接关系+自动填写字段。然后再次,标题到 customer_list,执行查询,重新标题,如果向导模式,标题到启动向导的起始页。 您可以将变量存储在 SESSION 中的一个数组中,并给它一个唯一的令牌。然后,您可以在每次重定向时传递该令牌,并使用它来访问特定的表单变量。不过,您需要小心定期清除旧变量,否则您最终可能会在其中保存相当多的表格。 (也许当完整的向导完成时?)【参考方案3】:试试函数session_destroy();
。
【讨论】:
这可能是一条评论。【参考方案4】:您可以通过两种方式做到这一点。
1) session_destroy(); by using this function.
2) unset($_session[$var_name or 'session_name']);
【讨论】:
【参考方案5】:当连接断开时,会话会自动销毁。如果用户关闭了他的浏览器窗口,或者您的页面的所有选项卡,会话将自行销毁。
【讨论】:
"你页面的所有标签页,会话都会被破坏"?会话数据将在服务器中。但是浏览器中的会话cookie会过期吧? @habeebperwad:是的,而且连接 ID 会改变。 PHP 最终会自动取消设置这些变量。 如果您关闭页面的所有选项卡,会话不会被破坏。以上是关于离开页面时取消设置会话的主要内容,如果未能解决你的问题,请参考以下文章