【问题标题】:Asp.net website loses session on changing client urlAsp.net 网站在更改客户端 url 时失去会话
【发布时间】:2016-10-18 14:24:03
【问题描述】:

我有一个在 IIS7 上运行的 asp.net 网站,并且遇到了一些大学用户突然失去会话的问题。所有这些实例的共同点是用户的客户端 url/主机地址,他们正在访问我们的网站,在他们的会话中途发生了变化。需要明确的是,这就是我在他们的页面访问中记录的内容:

Request.UserHostAddress.ToString()

使用标准 asp.net cookie 跟踪会话状态。 web.config 中的相关行:

<sessionState mode="InProc" timeout="40"/>

该网站不使用框架,而是使用单个工作进程(即没有网络园艺)从单个服务器(即不是网络农场)运行。它只会周期性地发生在单个用户身上,而其他用户的会话同时保持打开状态。

我已根据this article on troubleshooting Session loss 将 cookie 添加到要为该站点记录的内容列表中。几个问题:

  1. 是否有可能是大学丢弃了会话 cookie,而我们的服务器甚至没有收到它们?如果是这样,启用 cookie 的日志记录会解决这个问题吗?
  2. 如果 cookie 与之前关联的 url 不匹配,IIS 是否会丢弃它们?

【问题讨论】:

    标签: asp.net session cookies iis-7


    【解决方案1】:

    cookie 保持与会话的连接及其与域的关联。在某些情况下,域可能会在前面使用www. 调用,而在其他情况下则不会 - cookie 将丢失,因此会话。

    为了避免 web.config 上的那个地方把域名设置为

    <httpCookies domain="domainname.com" .... />
    

    不带 www. 以保留 cookie 或不带它。

    现在因为您使用作为服务运行的InProc 并将会话保留在内存而不是数据库上,所以该服务已知会由于某些原因而丢弃会话。为避免这种情况,您必须使用数据库来保持会话。

    其他情况可能是从https 移动到http,如果您只是为了安全而放置cookie,则会再次丢失。

    相关Share session between ashx and aspx

    【讨论】:

    • 改变的不是我们的域……而是他们的,即客户。他们通过地址更改的主机访问我们的系统。
    • @monty 如果地址改变,会话丢失!
    • 他们正在访问的地址,即我们网站的地址,没有改变。
    猜你喜欢
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 2011-02-20
    • 2018-04-09
    • 2017-10-04
    • 1970-01-01
    相关资源
    最近更新 更多