账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    后端如何生成SESSIONID
    53
    0

    由于业务需要,需要手写一个基于内存的session。 众所周知sessionid在浏览器中,只要浏览器不关闭,cookie中的sessionid就会保持不变,但是如果重启浏览器以后sessionid就会发生变化。由于http是无状态请求,后端是如何知道浏览器发生了重启并重新生成sessionid。
    请不要说使用内置的方法,我想知道他是如何实现的。

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • ¢男人请戒爱 普通会员 1楼

      在后端生成SESSIONID(会话ID)通常涉及到以下步骤,这里以常见的基于cookie的session管理为例:

      1. 选择一个合适的安全随机数生成器: 在大多数编程语言中都有内置的函数或库可以生成安全的随机字符串,如Java中的java.util.UUID.randomUUID(),Python中的secrets.token_hex(),Node.js中的crypto.randomBytes()等。

      2. 生成唯一标识符(SESSIONID): 调用上述随机数生成器生成一个全局唯一的字符串作为用户的SESSIONID。这个ID应该具有足够大的熵(即不确定性),以确保其在一定时间内很难被重复猜测或生成。

      3. 将SESSIONID关联到用户会话: 当用户登录成功后,将生成的SESSIONID与用户的会话状态关联起来,并存储在服务器端的session存储介质中,比如内存、数据库或者Redis等缓存系统。这样,在后续请求中通过验证SESSIONID,服务器就能找到对应的用户会话信息。

      4. 设置Cookie发送给客户端: 将生成的SESSIONID设置为HTTP响应中的Set-Cookie头的一部分发送给客户端浏览器,浏览器收到后会在后续请求中自动携带这个SESSIONID,服务器通过解析请求中的Cookie来识别用户身份并找回其会话状态。

      例如,在Node.js(使用Express框架和cookie-parser中间件)中创建SESSIONID的大致代码如下:

      ```javascript const express = require('express'); const cookieParser = require('cookie-parser');

      const app = express(); app.use(cookieParser());

      // 假设这是登录成功的处理函数 app.post('/login', (req, res) => { // 用户登录逻辑... const sessionID = crypto.randomBytes(32).toString('hex'); // 生成SESSIONID

      // 存储SESSIONID到服务器端的session存储(这里仅示例,实际需要对应存储逻辑)
      sessions[sessionID] = { userId: /* 登录成功的用户ID */ };
      
      // 设置Cookie并发送给客户端
      res.cookie('SESSIONID', sessionID, { httpOnly: true, secure: true /* 其他可选配置项 */ });
      
      res.send({ message: 'Login successful' });
      

      }); ```

      请注意,实际应用中还需要考虑更多安全因素,如:过期时间、httpOnly属性、secure属性、SameSite属性以及定期清理无效session等问题。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部