• 如何处理一个站点不同Web应用通用Session


    前一段时间被同一个站点的不同Web项目通用Session的问题苦恼,在CSDN网友的帮助下,找到了解决方法,网上也找到了一些相关文章。不过这些文章描述的并不够详细,我把这些相关知识整理一下,方便自己以后查找,也方便以后碰到这样问题的人,不要到处找资料,拼凑资料。

    同一个站点,不同虚拟目录下的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中应该删除的。

    <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" />

    满足以上条件就可以通用Session了。

    下面针对对于团队开发中,使用vs.net开发站点不同项目通用Session写一个简单演示:

    前提条件:

    有两个Web 应用 WriteSession ,ReadSession 在同一个站点。我们要演示的是 WriteSession Web应用中写一个Session值,比如Session["aaa"] = "123";  然后在ReadSession中读取出这个Session值。

    上述两个工程就相当于大型Web开发中的分配给两个人的开发工程。可以这样认为,WriteSession 是处理用户登录,登录后登录信息记录到Session 然后其他Web工程 比如罗列用户信息在另外一个Web工程ReadSession

    1、把两个Web工程包含在同一个解决方案中,比如:WebTest;(这个不用我图片演示了把,新建一个空白解决方案,然后把存在的两个Web工程加入这个解决方案)

    2、新建一个Web工程,这个工程是整个站点的Web工程,不用包含这个站点下的几个Web工程,如果从解决方案浏览器下看如下图:


    (图2 虽然 ReadSession WriterSession 下的aspx文件也属于ghj1976.csdn.net这个Web工程的一部分,但是它的工程下并没有罗列,这样实现了一个站点多个项目的功能,在稍后的配置中可以看到,ReadSession WriterSession 都被解除了虚拟目录。)

    3、按照图一提供的方法,去除ReadSession 和 WriterSession 的虚拟目录配置。

    4、ReadSession 和 WriteSession 两个Web工程的Web.Config文件中删除一些设置,删除那些看上面提到的框。(为了减少麻烦,最简单的方法是直接删除Web.Config和Global.asax 两个文件。这样以后程序启动就调用它上级的这两个配置文件,也就是ghj1976.csdn.net这个web应用的这两个文件)

    5、在ghj1976.csdn.net web工程中增加对 ReadSession WriteSession 两个Web工程的引用,注意:是工程引用,不是其他引用 看下图

    (图3 这三个Web工程是在同一个解决方案里面,这样才可以实现 工程引用)

    图2也可以看到把这两个工程引用到ghj1976.csdn.net工程了。

    6、生成解决方案,运行程序就看可看到,一切ok了。

    如果要发布这个程序,执行文件只需要copy 根目录下bin目录下的文件就可以了。

    其他要注意事项:

    新建一个解决方案,这个解决方案只包含其中一个Web工程比如:ReadSession ,修改代码,生成解决方案,你会发现执行咋会不是自己修改后的呢。哈哈,当然不会一样了,这个工程已经不是虚拟目录了,他调用的执行文件是根目录下bin目录的文件,而不是这个解决方案目录下bin目录下的。

    团队开发中,WriteSession 可以看作每个人都要调用的公共工程,ReadSession 可以认为是每个人自己负责的工程,这样就可以实现团队开发中的多个工程共享一个Session了。

    如何团队开发网上这方面的文章很多,这里就不重复了。

    相关资料连结:

    CSDN 讨论这个问题的帖子在:

    http://expert.csdn.net/Expert/topic/1773/1773115.xml

    307467 HOW TO: Create an ASP.NET Application from Multiple Projects for Team

    http://support.microsoft.com/?id=307467

     How to Share Session/Application State Across Different ASP.NET Web Applications

    http://www.asp101.com/articles/jayram/sharestate/default.asp

     317786 HOW TO: Manage Multi-Project Solutions in Visual Studio .NET

    http://support.microsoft.com/?id=317786

    http://www.wewill.cn/default.asp?action=article&ID=218

  • 相关阅读:
    Training: WWW-Robots
    Training: Stegano I
    Encodings: URL
    利用Nginx实现域名转发 不修改主机头
    C++删除目录和复制目录函数
    获取文件大小的函数
    日志打印函数
    拉起上级目录程序
    安卓TabHost页面
    有趣的人形时钟
  • 原文地址:https://www.cnblogs.com/flyfish/p/429922.html
Copyright © 2020-2023  润新知