【问题标题】:How to generate unique session id when accessing aspx page访问aspx页面时如何生成唯一的会话ID
【发布时间】:2016-02-12 02:57:30
【问题描述】:

我有一个包含许多 aspx 页面的网站,其中一个需要在用户进入时生成唯一的会话 id。这个会话 id 应该是及时的结构化字符串,如 yyyymmddhhmmssms(年、月、日、小时、分钟、秒,毫秒)。因此,当用户访问这个特定的 aspx 页面时,用户会获得一个唯一的会话 ID。然后,当单击完成按钮时,会话 id 被触发并且永远不会被重用。

【问题讨论】:

  • 会像在 DateTime 字符串的末尾连接 Guid.NewGuid 一样简单吗?
  • 会话本身有一个 ID msdn.microsoft.com/en-us/library/…>。如果您需要在会话中存储其他内容,只需将此数据添加到密钥中,即Session("MyKey") = "my data"

标签: asp.net vb.net session


【解决方案1】:

这可能是可能的,但首先要做的是:时间戳不是唯一的,而且您永远不希望 sessionID 是可猜测的。这就是为什么默认 SessionID 是由加密随机数生成器生成的 120 位数字(详情 here)。除非您和您的用户同意会话的内容可供全世界使用,否则应避免使用任何确定性(如时间戳)。

更多关于会话状态安全的信息是here

无论如何,我不知道有什么方法可以将会话 ID 换成单个页面。您的浏览器将会话 cookie 与主机相关联,而不是单个页面,因此它会将会话 cookie 发送到您网站上的每个页面。如果您没有在网站上的其他任何地方使用会话,那么您可以摆脱以下情况:

  1. 使用Page directive's EnableSessionState 属性禁用除相关页面之外的每个页面的会话状态。当用户单击完成按钮时,在处理程序中调用 Session.Abandon。
  2. 通过实现和注册您自己的ISessionIDManager 实现来使用您自己的会话ID 生成器。但请不要为您的 ID 使用时间戳。

【讨论】:

    猜你喜欢
    • 2013-07-07
    • 1970-01-01
    • 2012-06-24
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    相关资源
    最近更新 更多