ASP.net:是否可以从session-id手动初始化会话

时间:2011-07-05 12:25:48

标签: asp.net session asmx sessionid

我正在用C#构建一个Web服务(ASMX)。我正在考虑使用ASP.net会话ID作为身份验证的标记。

我使用CreateSessionID生成了session-id。这将在成功验证后发送给客户端(作为Web服务调用'login'的返回值)。

对于后续请求,客户端会将session-id作为参数发送到Web服务调用。是否可以从此会话ID字符串重新创建会话?

提前致谢。

1 个答案:

答案 0 :(得分:6)

此方法存在的问题是CreateSessionID实际上并未创建会话。顾名思义,它只创建一个唯一的会话ID。如果您查看MSDN documentation,则说明

  

此方法无意   从应用程序代码调用。

如果您再多阅读一下,您会发现该方法是由自定义会话ID管理器覆盖的,然后可以通过编辑您的web.config将其集成到会话管理系统中。

换句话说,您当前对CreateSessionID的使用并不是您想要它做的。

如果你真的想在你的网络服务中使用会话状态,你应该看看this article

简而言之,您需要将EnableSession=true参数添加到[WebMethod]属性中,然后才能通过Context.Session自动访问会话。请注意,这不需要通过服务传递会话ID,因为IIS将为您处理所有事情。

可以使用CreateSessionID()方法(尽管你最好使用别的东西)来创建一个用户需要随每个请求传递的令牌,但它只会被使用验证用户;没有会话可以基于它重新生成。如果您选择此路线,请确保通过HTTPS访问您的服务。否则,任何窃听者都会以纯文本形式看到令牌(尽管如果您还检查IP地址/用户代理字符串/等,这可以减轻。)

希望有所帮助。