2010-12-22 56 views
1

我有一个PHP应用程序,它依赖会话变量相当多。登录后,用户将被重定向到执行代码的页面,以根据用户的身份设置会话变量负载。应用程序使用来自不同来源的数据,会话用于存储ID号码以查询数据库。PHP:替代SESSIONS

因此,当用户转到将查询其资产管理系统的页面时,他们将通过会话调用该特定数据库的ID。

最近我遇到了很多会话变量的问题。有时在应用程序的生命周期中只会创建一个会话文件,有时每个会话请求都会生成一个新的会话ID(仍然无法找出原因!)。

我的问题是这样的。有没有替代使用会话变量?像全局或其他方式?

我对我在这里的会话问题开一个问题 - PHP session variables not being maintaned

回答

2

另一种替代方法是将会话数据存储在数据库中,为用户提供cookie和session_id。这会让你对会话有更多的控制。

+0

这听起来不错,但我遇到了问题,每个会话请求都会生成一个新的会话ID。所以如果我给他们一个会话ID,它很可能会改变或被覆盖 – iamjonesy 2010-12-22 10:46:21

+0

其实这是一个cookie问题。在一个页面上创建一个cookie,导航到另一个页面,cookie不见了 – iamjonesy 2010-12-22 10:57:07

-1

的替代课程是饼干(事实上,会话使用Cookie,通常可以实现)。但是,只有在您要存储小型数据量时才应使用Cookie。

1

不,因为每个用户会话都应该有一个值,所以您需要某种会话机制。 PHP的会话对此很好。您可能只需要正确配置以满足您的需求。

2

你可以使用一些其他的“会话”解决方案,但这需要你做更多的管道。

例如,您可以使用基于网址的会话,其中网站生成的每个网址都包含一个会话ID。这通常是网站的重新设计,并且唯一需要的时间是如果您需要在多个域中进行相同的会话,或者您想让同一台计算机在浏览器的不同窗口中运行不同的会话。

但在你的情况下,我会检查为什么会话中断,它可能是一个配置问题,或者你有其他东西,拧了会话文件。

我从未有过PHP会话任何麻烦,他们只是工作;)

0

会议似乎为这个正确的解决方案。 一般会话的工作方式如下: 会话对象在服务器上创建并分配了一个ID。该ID通过cookie发送给浏览器并通过浏览器的请求发送到服务器,从而使服务器能够从内存中获取正确的会话对象。

你可能想看看你的会话是如何配置的。如果您保留“放松”会话,一个可能的原因可能是您在子域之间“跳跃”,并且仅为一个子域设置会话cookie。另一个原因可能是您的会话过期时间过短。

0

Cookies是不是一个真正的选择,特别是当用于登录,因为它们可以由用户来改变,而只是会话包含存储在计算机上的识别哈希一个cookie,并修改它不会得到他们很远。

无论如何,会议工作。毫无疑问,您的问题是实施问题。我建议你花一些时间进行调试和测试,因为实施替代方法会导致一个令人难以置信的更复杂的代码 - 而且你不想这样做,因为会话已经给你带来了麻烦。

0

对于在每次请求时重新创建的会话,您应尝试调试由服务器发送给您的Cookie。 在这些cookie中检查cookie域是否正确(并检查cookie路径)。

要调试Cookie,您可以使用Web开发者工具栏来显示页面加载后哪些cookie处于活动状态。但最好的工具是Live Http头文件,检查服务器发送的真实头文件,在那里你会发现真正的cookie内容,如果cookie域中存在不匹配的情况(例如 - 但大部分时间都是这样),您的浏览器不会为您的网站存储此Cookie。

如果浏览器忽略一个cookie,在下一个页面请求PHP构建另一个会话等

如果你不能让你cooki系统的正常工作,你可以跟踪跟踪会话标识在PHP中,这是旧的方式使用PHPSESSID的永久获取和/或后置参数。 你需要--enable-rans-id你的PHP编译(在phpinfo页面上查看)http://www.php.net/manual/en/session.idpassing.php