C#、AJAX、Web2.0

技术备忘录

导航

多个project[项目]共享session

Posted on 2006-09-22 14:36  李飞  阅读(1997)  评论(1编辑  收藏  举报
1. 建立一个空白解决方案blank solution,如:d:\MyProject\MyProject.sln

2. 在d:\MyProject下建一个Web Application的根目录d:\MyProject\WebMis并设为http://localhost/WebMis的虚拟目录

3. 在WebMis目录下根据模块分别新建目录,如:d:\MyProject\WebMis\Login和d:\MyProject\WebMis\CheckOut

4. 在VS.net中根据模块新建web application,如:http://localhost/WebMis/Login和http://localhost/WebMis/CheckOut

5. 新建后Login和CheckOut两个目录自动被设置为虚拟目录

6. 在WebMis项目中添加Login和CheckOut的项目引用

7.在IIS管理器中删除Login和CheckOut的虚拟目录

8. 删除各项目的global.asax(除根项目)

9. 除去个项目的web.config(除根项目)中的如下代码:
<authentication mode="Windows" />
<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20" />
或删掉web.config(若不需要在各目录中进行配置)

10. 编译后,即可运行。






同一个站点,不同虚拟目录下的Web应用程序不能共享Session。而VS.net 默认创建的 Web 工程是一个工程一个虚拟目录,一个工程使用一套自己的Web.config和Global.asax文件,这样我们在开发一个站点的多个关联项目(通过Session共享资源)的时候,就会遇到麻烦。
解决这个问题并不难,把这些工程合并到一个虚拟目录下,至于Web.config和Global.asax,虽然一个工程可以配置一个,但是推荐还是整个web站点用一套配置,而且不同目录下的Web.config影响不同的目录下aspx的配置,如果根目录下和一个WEB应用程序目录下都有Web.config文件,而且都定义了,sessionState mode="InProc" 显然这两个应用的Session不可能共享了。
具体来说,满足以下条件,可以实现同一站点Session共享。
1、需要共享Session的站点去处虚拟目录设置,如下:
(,删除应用程序的虚拟目录,注意是点击删除按钮,不是卸载按钮,把自己的应用程序目录文件删除了我可不负责)
2、保证整个站点有个Web应用程序必备的东西,比如Web.config和Global.asax。 这里的设置是要对整个站点负责的。简单的方法可以在站点的根目录创建一个Web应用。
3、删除各个需要通用Session站点目录下Web.config和Global.asax文件中影响该应用程序的设置,比如下面框中是罗里的Web.config中应该删除的。

满足以上条件就可以通用Session了。
简单演示,实现webapp1 和 webapp2 Session互访:
前提条件:
有两个Web 应用 WebApp1,WebApp2在同一个站点。我们要演示的是 WebApp1应用中写一个Session值,比如Session["data1"]="data1"; 然后在WebApp2中读取出这个Session值。
1、把两个Web工程包含在同一个解决方案中,比如:Solution3;(这个不用我图片演示了把,新建一个空白解决方案,然后把存在的两个Web工程加入这个解决方案)
2、新建一个Web工程ShareNow1,这个工程是整个站点的Web工程,不用包含这个站点下的几个Web工程,如果从解决方案浏览器下看如下
3、去除WebApp1和 WebApp2的虚拟目录配置。
4、WebApp1和 WebApp2两个Web工程的Web.Config文件中删除一些设置,删除那些看上面提到的框。(为了减少麻烦,最简单的方法是直接删除Web.Config和Global.asax 两个文件。这样以后程序启动就调用它上级的这两个配置文件,也就是这个ShareNow1  web应用的这两个文件)
5、在ShareNow1 web工程中增加对 WebApp1 WebApp2 两个Web工程的引用,注意:是工程引用,不是其他引用
( 这三个Web工程是在同一个解决方案里面,这样才可以实现 工程引用),图2也可以看到把这两个工程引用到ShareNow1工程了。
6、生成解决方案;
7、在webapp1中WebForm1.aspx设定Session[“data1”]并显示;
在webapp2中WebForm2.aspx显示由webapp1中WebForm1.aspx接受的Session[“data1”]的值。