如何在用户离开页面时取消设置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”时,没有其他方法可以取消设置这些会话吗?
答案 0 :(得分:3)
这可能是一个愚蠢的问题,但为什么要在每个页面上取消设置某些会话变量?
当然,会话的目的是在页面视图中保持不变,因此您只想在特定的触发点(例如用户退出系统)中取消设置或清除它。
要回答这个问题,许多框架通常会对所有脚本使用单个入口点,进行任何初始化,将实际页面工作转移到控制器,然后返回单个入口点。如果您使用此方法,则可以在页面末尾添加任何结束逻辑。
答案 1 :(得分:2)
如果我正确理解了这个问题,那么我实际上不会使用会话,而是依赖页面之间的POST变量。
我认为您想要做的只是在您直接从公司页面进入客户页面时(或者可能反过来?)保留某些表单字段。当用户直接或稍后访问客户页面时,字段需要清除。
在这种情况下,您只需确保在提交表单时,将其发布到其他页面并从REQUEST收集数据。
如果您实际在其他地方发布表格(处理公司的添加),然后转发到客户的表单页面,那么您可以发布隐藏的表单,或者您可以重新安排您的工作流程,以便最后完成公司和客户的插入。
答案 2 :(得分:1)
尝试功能session_destroy();
。
答案 3 :(得分:1)
你可以用两种方式做到这一点。
1) session_destroy(); by using this function.
2) unset($_session[$var_name or 'session_name']);
答案 4 :(得分:0)
连接终止时会自动销毁会话。如果用户关闭了他的浏览器窗口或所有页面的选项卡,会话将自行销毁。