PHP:基于MYSQL的会话在不同机器上共享

发布于 2024-09-15 13:55:37 字数 769 浏览 4 评论 0原文

我有一个应用程序位于机器 A (solaris.example.com) 上,相同的应用程序位于机器 B (rhodes.example.com) 上,这两台机器连接到同一个 MYSQL 数据库,该数据库上有会话表。

我已经实现了自己的会话处理程序,因此它保存到数据库而不是保存到文件中,并且效果很好。

我的问题是,如何从机器 B 访问在机器 A 上创建的确切会话 ID?

我在两台机器的初始化脚本上都有这些设置:

ini_set("session.gc_maxlifetime", "288000"); 
ini_set("session.cookie_lifetime", "288000");
ini_set("session.save_handler", "user");  
session_set_cookie_params( 0, "/", ".example.com", false, false);
session_cache_expire(288000);

我遇到的问题是机器 B 不断在表上创建新会话,并且当我尝试使用 session_id( $ _GET["sessId"] ) 它覆盖了机器 A 创建的值。

问题是,我如何告诉机器 B 使用机器 A 创建的会话 ID 并从机器 B 获取数据桌子?

我认为这将是自动的,因为我已经调用 session_set_cookie_params( 0, "/", ".example.com", false, false);

任何帮助都会很棒

I have an app sits on machine A (solaris.example.com) and same apps sits on machine B (rhodes.example.com), these two machines are connected to same MYSQL database which has session table on it.

I've implemented my own session handler so it saves to the database instead of saving it to the files and this works fine.

My question is, how do I access an exact session ID that is created on machine A from machine B?

I have these setup on my init script for both machines:

ini_set("session.gc_maxlifetime", "288000"); 
ini_set("session.cookie_lifetime", "288000");
ini_set("session.save_handler", "user");  
session_set_cookie_params( 0, "/", ".example.com", false, false);
session_cache_expire(288000);

The problem I'm getting is that the machine B keeps creating a new session on the table and when I tried to set the session ID on machine B using session_id( $_GET["sessId"] ) it's overriding the value that's been created by the machine A.

The question is, how do I tell machine B to use the session ID that is created by machine A and get the data from the table?

I thought this is going to be automatic since I've called session_set_cookie_params( 0, "/", ".example.com", false, false);

Any help would be fantastic

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

烛影斜 2024-09-22 13:55:37

我会尝试在用户的计算机上保存 cookie,以便我可以轻松确定他/她的会话是否存在。当然,如果用户禁用了cookie,这将不起作用。

您可以根据用户 IP/等存储某种有意义的数据,然后您可以根据这些数据来识别用户。注意:只有当您可以准确识别用户时,此解决方案才有效。否则,您可以将其他用户的会话提供给当前用户。

编辑我在SO上找到了一个链接,也许会有帮助。

I would be trying to save a cookie on users' machine so i can easily determine if his/her session is existing or not. Of course if the user has disabled cookies this won't work.

You can store some kind of meaningful data based on the user ip/etc then you can identify the user based on this data. Note: this solution is working only when you can exactly identify the user. Otherwise you can give a other users' session to the current user.

Edit i found a link on SO, maybe it will help.

花开雨落又逢春i 2024-09-22 13:55:37

假设在客户端的 URI 中使用相同的主机名来访问两台计算机,那么您的方法没有明显的错误。

session_id( $_GET["sessId"] )

当然,如果他们在客户端使用不同的主机名,那么您需要自己填充会话 ID - PHP 可能不会为您做这件事。

使用 cookie 是一种更明智的方法,并且可以大大简化事情。

您应该检查在机器 A 上创建的会话 ID 是否确实呈现给机器 B(作为 cookie 或在 URL 中)。如果是的话,那么就会发生一些非常不寻常的事情。

There's nothing obviously wrong about your approach assuming that both machines are accessed using the same hostname in the URI at the client-side.

session_id( $_GET["sessId"] )

use_trans_id should be avoided wherever possible. Cookie values are only present in $_REQUEST (depending on request_order ini setting) or in $_COOKIE.

Certainly if they are using different hostnames at the client then you'll need to populate the session id yourself - PHP probably won't do it for you.

Using cookies is a far more sensible approach and simplifies things greatly.

You should check if the session id created on machine A really is presented to machine B (as a cookie or in the URL). If it is, then something very unusual is going on.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文