我公司拿了一些旧的php应用程序。由于我们偏爱ASP.net并且缺乏先前开发人员的任何文档,我们不希望花费太多资源来开发PHP。 为了实现新功能,我们将创建一个与用户具有相同外观的Asp.net应用程序。我们希望开发一种“共存”的Web应用程序。因此,我们必须在PHP和Asp.net webapplication项目之间共享会话,因为存在涉及现有MySQL数据库的用户管理。
(例如,链接'A'指向PHP网站,链接'B'指向asp.net应用程序)
我们如何在PHP和asp.net应用程序之间共享会话?
有没有人对这种“共存”的东西有所暗示,这可能对开发有用?
编辑:IIS 6将成为我们的目标服务器,尽管IIS 7.5也是一个选项
答案 0 :(得分:14)
我想告诉你,我最终是怎么做到的。
两个应用程序都访问一个MySQL数据库并访问一个“会话”表,该表由一个Guid,用户的ID和一个confirmString(我猜我在其中以某种方式编写了IDUser)和一个日期组成。
会话仅由PHP应用程序启动(因为PHP应用程序仍然是主要应用程序)。新会话将在日志表中生成新条目。 PHP应用程序中链接到ASP.Net应用程序的每个链接都包含GET参数,包含Guid等。
如果GET参数指向现有会话,ASP.net应用程序将检查GET参数并在ASP.Net会话中设置IDUser。
指向PHP应用程序的链接使用相同的技术。
(还有其他需要考虑的事情,比如超时或退出,但也可以处理)
总而言之,我说我的方法很有用,自部署以来没有客户投诉(超过1年前)
答案 1 :(得分:2)
我认为在PHP和ASP.NET之间共享会话本身并不可能。
但是,可以通过使用读取会话内容的PHP页面,将它们存储在隐藏字段中,然后调用将读取这些字段并将它们加载到ASP.NET会话中的ASP.NET页面。 / p>
理论上它是可能的。
答案 2 :(得分:2)
这是一个老问题,但我认为目前的答案都不完整。
首先,我认为将会话数据存储在数据库服务器(如mysql或SQL Server)中是一个坏主意。数据库是一种宝贵的资源,实际上没有理由仅仅为会话数据而破坏它。
如果你要在这样的数据库中存储会话,有“更好”的方法,比如确保会话数据在它自己的独立磁盘上等等......但老实说,我还是觉得喜欢这是一个错误,会限制你的可扩展性。
对于存储会话,你想要一个简单的键/值存储,在我看来你不能击败memcached(虽然我也有好运的redis + nodejs)。
memcached的客户可以使用地球上的几乎所有语言:http://code.google.com/p/memcached/wiki/Clients
因此,使用memcached时基本上所需要做的就是为密钥生成伪随机标记,然后执行memcached.set。然后将该密钥存储在名为session-id的cookie中。
可以从任何服务器语言,.net,php,python等中读取session-id cookie,并使用简单的memcached.get检索会话值。
查看memcached文档:http://code.google.com/p/memcached/wiki/NewStart
这是一种非常简单且可扩展的会话方式,几乎适用于任何语言/服务器。
答案 3 :(得分:0)
http://cz.php.net/manual/en/function.session-set-save-handler.php
http://support.microsoft.com/kb/317604
您可以将PHP的会话编写到MsSQL中,并将.NET配置为使用MsSQL作为会话的后端。
答案 4 :(得分:0)
没什么大不了的 你的asp应用程序应该做三件简单的事情:
sess_<id>
文件答案 5 :(得分:0)
一种比攻击双方会话存储机制更好的方法是设置OpenId提供程序并将OpenId消费者插入到asp.net和php应用程序中。
有很多现有的代码可以做到。它比低级解决方案更优雅,更容易出错。作为奖励,您可以在公司的其他应用程序中使用集成的OpenId登录,并成为公司的英雄。
请参阅:Using OpenID for both .NET/Windows and PHP/Linux/Apache web sites
答案 6 :(得分:-1)
默认情况下,PHP将其会话数据作为序列化数组写入根据会话命名的文件中。会话通常由名为PHPSESSID的cookie标识。
所以在PHP中手动阅读会话:
$imported_session=unserialize(file_get_contents(session_save_path() . '/' . $_COOKIE[session_name()]));
该文件的格式非常简单,易于解析。
然而,很容易实现自己的PHP会话处理程序以任何格式将文件写入您喜欢的任何存储(请查看自动预置如何将已撤销的代码与每个页面关联,而不必重写每个一)。或者更改用于存储会话的cookie的名称。
下进行。