3

如何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>&nbsp;</th>
    <th>&nbsp;</th>
  </tr>

在第 2 页的末尾:

if (isset($_SESSION['wizard3']))
{
    unset ($_SESSION['wizard3']);
    unset ($_SESSION['custprovincesession']);
}

因此,通过刷新页面可以取消设置会话。当用户离开“customer_page.php”时,是否没有其他方法可以取消设置这些会话?

4

5 回答 5

3

这可能是一个愚蠢的问题,但为什么要在每个页面上取消设置某些会话变量?

当然,会话的重点是在页面视图中持续存在,因此您只想在特定触发点(例如用户注销系统)取消设置或清除它。

为了回答这个问题,许多框架通常会为所有脚本使用一个入口点,该入口点会执行任何初始化,将实际页面工作转移到控制器,然后返回到单个入口点。如果您使用这种方法,那么您可以将任何关闭逻辑放在页面末尾。

于 2012-11-22T09:21:40.387 回答
2

如果我正确理解了这个问题,那么我实际上不会使用会话,而是依赖页面之间的 POST 变量。

我相信您想要做的只是在您直接从公司页面进入客户页面(或者可能反过来?)时保留某些表单字段。当用户直接或稍后访问客户页面时,需要清除这些字段。

在这种情况下,您只需确保在提交表单时发布到另一个页面并从请求中收集数据。

如果您实际上是在其他地方发布表单(以处理公司的添加),然后转发到客户的表单页面,那么您可以发布隐藏表单,或者您可以重新安排您的工作流程公司和客户的插入在最后完成。

于 2012-11-22T09:41:14.167 回答
1

试试功能session_destroy();

于 2012-11-22T09:19:40.850 回答
1

你可以通过两种方式做到这一点。

1) session_destroy(); by using this function.
2) unset($_session[$var_name or 'session_name']);
于 2012-11-22T09:34:32.697 回答
0

当连接断开时,会话会自动销毁。如果用户关闭了他的浏览器窗口,或者您的页面的所有选项卡,会话将自行销毁。

于 2012-11-22T09:20:34.850 回答