处理不同端口之间的会话

时间:2012-01-17 14:31:54

标签: php ajax session

我们的问题是我们使用一个服务器来监听端口80和端口8080,其中端口分别映射到数据库和网站。这种分离的原因是由于技术问题(它不是合并这些的选项)。 “database”-server可以处理PHP,但不能处理后者。

我们正在尝试使用PHP脚本实现会话。持有用户的数据库是mySQL数据库,会话用于用户的登录功能。我们使用jQuery的Ajax函数来获取在数据库服务器上编码的login-dialog-box。

如果我们测试数据库服务器上的login-dialog-box,那就好了。我们每次都获得相同的会话ID。但是,当我们尝试在网站服务器上使用它时(在使用Ajax调用加载它之后),我们会收到每个请求的新会话ID(即,每次我们执行某些操作时)!所以我们无法使用会话来跟踪事情,因为我们无法将会话ID保持链接到“活动会话”(这听起来不像我希望的那样好)。

我们不确定此处发生了什么,但怀疑数据库服务器将每个请求视为“新用户”。有意义吗?

我们如何解决这个问题?

事先,谢谢! : - )

旁注: 不确定它是否相关,但我们已经看到很多主题询问它:是的,我们已经开始了会议! : - )

1 个答案:

答案 0 :(得分:0)

Pecka,如果我正确理解你所有的身份验证都发生在“数据库服务器”,对吗?如果是这样,AJAX调用只返回数据库服务器的响应,而不是它通常用于帮助跟踪会话的cookie。

通过查看在AJAX调用期间交换的HTTP头来仔细检查我,但我认为您只获取“数据库服务器”返回的可见内容。

要查看标题,您可以使用Firefox和Live Headers附加组件。 https://addons.mozilla.org/en-US/firefox/addon/live-http-headers/

如果我错过了理解,请回复,我会再拍一次。


Pecka,根据我的理解,我可以就如何解决你的问题提出一个建议,但我会先说明我对安全的影响并不是很疯狂,如果是我,我正致力于让网络服务器使用PHP。那就是说......

您可以让数据库服务器在其响应中传递加密的令牌,如下所示:

if( [ENTER CRITERIA FOR CHECKING LOGIN HERE ]) {
    $hashSalt = 'PleasePr0tectM3';
    $token = md5($_POST['username' .date('mdY') .$hashSalt);
    echo $token;
 }

它必须是网络服务器也可以根据给定的输入在其末端计算的东西。然后,Web服务器会创建相同的哈希,如果它们匹配,您可以让Web服务器向它们发出会话凭据。

这很难看,但它可能会奏效。

让我知道。 :)