是否可以添加session_start();到我整个网站的顶部?

时间:2014-10-06 09:03:50

标签: php session session-cookies

我已经在我们网站的购买流程部分使用以下代码,位于使用会话的每个阶段的顶部。

   <?php
    session_cache_limiter('private_no_expire'); // must go before session start
    session_start();

我想在网站上更广泛地使用会话,例如在客户登录区域。

我有一个名为&#34; all.php&#34;的文件。其中包括我的所有类/对象和共享包含在我的系统上每个页面的开头。我想从所有单独的电子商务文件中删除上述代码并添加到&#34; all.php&#34;的顶部。看到它在系统范围内是一个好主意,并且首先在页面上加载。

由于这样做,我的客户登录区域遇到了问题。在用户浏览了几个链接后,它会不断地将用户重新登录到登录页面。看来,当您点击已经存在的网址时,它并不喜欢它并且只是将您发送回去。如果您将&amp; 1 = 1添加到您之前访问过的网址上,则会欺骗系统让您访问该网页,因为它是一个新的唯一网址。所以缓存肯定搞砸了。

我实际上并没有在网站的这一部分使用会话,所以它并不像你实际上已经注销了...它只是将你发送到你开始的那个页面,

任何人都可以对这里可能出现的问题有所了解吗?

是否可以使用session_cache_limiter(&#39; private_no_expire&#39;);

我使用上面的代码,因为我的购买流程使用POST表单,然后单击后退按钮会发出有关重新提交数据的丑陋信息。

http://php.net/manual/en/function.session-cache-limiter.php

更新:

评论第一行已经有所帮助,问题已经停止:

//session_cache_limiter('private_no_expire'); // must go before session start

这是一个临时修复,因为这意味着后退按钮导致数据重新提交警告。这只是意味着我需要正确地实现这一点,但我仍然要理解为什么这条线正在这样做:

http://en.wikipedia.org/wiki/Post/Redirect/Get

2 个答案:

答案 0 :(得分:1)

绕过这个的最快捷,最干净的方法是在完成处理表单数据时执行此操作,而不是在执行处理的页面上显示信息。

Header('Location: http://www.domain.com/page.php');

例如,如果您要将商品添加到购物车,请在完成后将用户重定向到购物车页面,或者再次将商品页面重定向到商品页面。

Since doing this, my customer login area has encountered problems. It keeps throwing users back to the login page after they've navigated a few links. It seems when you hit a URL that you've already been on it doesn't like it and just sends you back to the start. If you add &1=1 onto a url that you've been onto before, it tricks the system into letting you visit the page because its a new unique url. So the cache is definitely messing up.

session_cache_limiter('private_no_expire')。你不会因为你正在做的事情而需要它。

答案 1 :(得分:0)

这与我们在PHP中创建登录面板类似。 一旦用户进入,您需要使用session_start()启动会话,当用户单击注销时,使用ssession_unset()停止会话。这将解决您的问题。 尝试一下,让我知道它是否有效。

保持编码..