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

Sha*_*eem 0 asp.net session asmx sessionid

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

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

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

提前致谢.

dle*_*lev 6

这种方法的问题是CreateSessionID实际上并没有创建会话.顾名思义,它只创建一个唯一的会话ID.如果你看一下MSDN文档,它说

不应从应用程序代码调用此方法.

如果您再读一遍,您将看到该方法意图被自定义会话ID管理器覆盖,然后可以通过编辑您的web.config将其集成到会话管理系统中.

换句话说,您当前使用的CreateSessionID没有按照您的意愿执行.

如果您确实想在Web服务中使用会话状态,那么您应该看一下本文.

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

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

希望有所帮助.