【发布时间】:2013-09-05 08:31:24
【问题描述】:
我们有一个多年来开发的 ASP Intranet Web 应用程序,它在 IIS6 上运行。如今,我们想使用 PHP 语言添加一些新功能。 PHP 在同一台服务器上运行良好。会话变量需要在 ASP 和 PHP 之间共享。
我在问是否有其他替代方法可以在经典 ASP 和 PHP 之间共享会话,而不是使用数据库作为网关(对我们来说资源消耗过多)?双方都需要读取/编辑会话变量。
通过稍微调整,我注意到每次用户登录 ASP Web 应用程序时,PHP 端都会生成一个 PHPSESSID 和 ASPSESSIONID。这些在 ASP 端也是可见的,它们存储在服务器变量 HTTP_COOKIE 中,所以我认为 IIS 核心的 ASP 会话和 PHP 会话变量之间可能存在关联。
所以,
-- ASP--
<% Response.write ('HTTP_COOKIE') %>
给予:
__utma=...; __utmz=...; computer%5Fid=AAA; lan=fre;ASPSESSIONIDXXXXXXXX=BBBBBBBBBBBBBBBBBBBBBBBB; user_login=cccc
-- PHP--
echo '<pre>';
var_dump($_COOKIE) ?>
echo '</pre>';
给予:
Array
(
[__utma] => ...
[__utmz] => ...
[computer_id] => AAA
[lan] => fre
[ASPSESSIONIDXXXXXXXX] => BBBBBBBBBBBBBBBBBBBBBBBB
[user_login] => cccc
)
在 ASP 方面,如果我写的话:
<% Request.Cookies(strCookie)(strKey) %>
在一个循环中,它给了我一堆存储的键/值会话 cookie 列表。
但在 PHP 方面,我找不到获取这些键/值列表的方法。也许这是寻找更多的方法?一个真正的现有实现会有所帮助,但欢迎任何答案。
【问题讨论】:
-
为什么要使用 2 种语言共享同一个会话?建议使用基于令牌的方法
-
您可以实现自定义 PHP 会话处理程序。然后你需要弄清楚如何读取/解码/编码/写入 ASP 经典会话(从它们存储的任何地方)
-
澄清一下,您希望 ASP 端写入 PHP 会话,反之亦然?我应该认为这是一个相当棘手的问题。正如@David 所说,在每一端实现自己的会话处理程序可能更容易,因此您了解格式。
-
稍微google了一下,只修改PHP端看起来并不容易。这篇 MSDN 文章讨论了 ASP.Net 和 ASP 经典之间的共享会话:msdn.microsoft.com/en-us/library/aa479313.aspx 看起来您无法更改 ASP 经典会话的方式,只能在它之前和之后进入以将该会话数据复制到/从其他地方复制.如果您可以将建议的 COM 对象实例化添加到您的 ASP 经典应用程序中的一些常见包含中,那么该方法仍然可以工作。你想用什么来代替数据库?说一下redis之类的吧?
-
我遇到了在经典 ASP 和 ASP.net 页面之间交换会话变量的问题。最简单的方法是使用零大小的 iframe 访问其他语言的页面,并在查询字符串中传递会话变量
标签: php session iis asp-classic