Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“分享的最佳方式”;“会话状态”;在两个.net应用程序之间键入数据_.net_.net 2.0_Session State_State Server - Fatal编程技术网

“分享的最佳方式”;“会话状态”;在两个.net应用程序之间键入数据

“分享的最佳方式”;“会话状态”;在两个.net应用程序之间键入数据,.net,.net-2.0,session-state,state-server,.net,.net 2.0,Session State,State Server,我们有一个web应用程序,一开始很小,添加的任何新功能都只是作为同一项目的一部分,但是现在我们想为这些插件创建新项目 我们创建了一个新项目,它包含主项目的global.asax,还可以访问主项目的web.config,但是,在global-asax代码中有一个会话检查数据完整性,以查看用户是否登录。。这就是我们遇到问题的地方。。用户已登录,但站点出错,表明他们未登录,因为加载项项目无法访问主项目设置的会话用户id 目前,我们没有使用会话状态服务器或sql状态服务器,我们希望避免使用它,以避免一些

我们有一个web应用程序,一开始很小,添加的任何新功能都只是作为同一项目的一部分,但是现在我们想为这些插件创建新项目

我们创建了一个新项目,它包含主项目的global.asax,还可以访问主项目的web.config,但是,在global-asax代码中有一个会话检查数据完整性,以查看用户是否登录。。这就是我们遇到问题的地方。。用户已登录,但站点出错,表明他们未登录,因为加载项项目无法访问主项目设置的会话用户id

目前,我们没有使用会话状态服务器或sql状态服务器,我们希望避免使用它,以避免一些旧代码带来的任何麻烦

我们也不想走互斥体的路线。。想要远离windows编码,如果我们可以的话

会议内容的现场概述: 用户使用asp代码(.net 1.1代码)登录 用户经过身份验证并成功登录,将该用户的guid发送到数据库,主项目(.net 2.0代码)获取该guid,获取用户数据并将用户id存储在会话中。 任何需要知道用户是谁的页面都会从会话(“userid”)中获取该页面

因此: 我们在global.asax中创建了另一个项目,可以访问web.config-DONE

在此基础上,我们想做什么:
让这个新项目包含一个页面(主项目的附加功能),让这个页面访问从主项目设置的会话(“userid”)。-不知道如何做到这一点…

我想在我的建议之前说,将复杂性降至最低的最佳方法是使用状态服务器。这是他们设计用来解决的问题

话虽如此

由于这两个应用程序必须在不同的进程中运行(因为它们在不同的运行时版本中),因此它们不能直接共享数据

一种选择可能是使用Web服务或。您可以拥有一个CustomSession对象,该对象存储会话的所有数据,并通过。您可以通过Guid CustomSession跟踪应用程序A中创建的所有现有会话,并通过querystring将Guid传递给应用程序B。应用程序B可以通过Web服务或远程处理使用Guid查询应用程序A,并获取相应的CustomSession对象。你也可以反过来做同样的事情

这里唯一的问题是,当从应用程序a中的页面移动到应用程序B中的页面时,您必须确保URL中始终提供Guid,反之亦然。应用程序始终可以检查会话是否不存在,以便返回到使用Guid查看其他应用程序是否有会话


请注意,某些.NET数据结构(不是很多)在.NET 1.1和2.0之间的序列化方式不同,因此,在通过远程处理或web服务共享对象时,您可能需要对此进行说明。

我知道您说过要远离会话状态服务器

但我仍然认为这是最好的选择。特别是如果您计划共享更多的数据,而不仅仅是登录ID,以实现未来的可扩展性和可维护性。此外,通过会话状态服务器共享登录数据比通过查询字符串等在客户端保存登录数据更安全


但是,不管您最终如何共享会话数据,就像另一张海报“Rex M”所指出的那样,您都需要注意共享的会话数据的类型以及它需要能够序列化。

您可以使用cookies存储您的用户ID。您的1.1和2.0应用程序都可以访问它而不会出现任何问题。

使用Web服务或远程处理与会话状态服务器类似,只是您必须自己实现它——可能不值得这样做

如果您打算自己做这件事,还有一个前面没有提到的问题:会话超时。您需要确保这两个进程对上次使用会话的时间有相同的认识。如果您做得不对(我也遇到过这种情况),您将有可能进入一种状态,即您似乎登录到应用程序的一个部分,而不是另一个部分。

Rex M: 我们正在尝试在相同版本的.net之间共享会话数据。。两者都运行.NET3.5(在.NET2.0框架上运行),我们已经有了将登录数据转换到2.0框架的代码

我们的主项目正在运行,但是我们想用模块将其添加到其中,我们认为简单地说,如果您添加另一个.net web应用程序,不使用名称空间,并设置会话状态服务器,设置引用,然后进行编译,那么一切都将非常重要

两个应用程序(尝试与之共享会话数据的应用程序)都在运行2.0 framework,都在同一个应用程序池中,都使用相同的计算机密钥和状态服务器信息,都在同一台计算机上运行,只是在不同的文件夹中,(但是共享相同的父文件夹)

我们能做些什么来让它工作吗


(不使用sql state server)。

在两个web应用程序之间导航时,可以使用一个或多个加密的查询字符串变量进行传递,以便在两个web应用程序中查询和重新建立重要的会话变量。这是最简单的方法