session理解

session理解

在前后端分离场景下,服务器端不能从 request 获取 session, 这让我很好奇

Session

Session是啥? 是另一种记录客户状态的机制,相较于Cookie,Session是保存在服务器上的,客户端第一次请求服务器的时候,服务器生成一份session保存在服务端,将该数据的id以cookie的形式传递给客户端;以后的每次请求浏览器都会自动的携带cookie来访问服务器

Session的常用属性

  • name:设置cookie中,保存session的字段名称,默认为connect.id
  • store:session的存储方式,默认存放在内存中
  • secret:通过设置的 secret 字符串,来计算 hash 值并放在 cookie 中,使产生的 signedCookie 防篡改。
  • cookie:设置存放 session id 的 cookie 的相关选项,默认为 (default: { path: '/’, httpOnly: true, secure: false, maxAge: null })
  • genid:产生一个新的 session_id 时,所使用的函数, 默认使用 uid2 这个 npm 包。
  • rolling:每个请求都重新设置一个 cookie,默认为 false。
  • resave:即使 session 没有被修改,也保存 session 值,默认为 true。

保存sessionID的方式

  • 内存上或数据库
  • 采用cookie保存sessionId
  • URL重写,把session_id附加在URL路径的后面(一种作为URL路径的附加信息,另一种是作为查询字符串附加在URL后面)
  • 表单隐藏字段,就是服务器会自动修改表单,添加一个隐藏字段,提交的时候可以把sessionId传递回服务器。

1.4 session与cookie的区别?

作用范围不同?

  • Cookie保存在客户端(浏览器),容易遭到不法获取
  • Session保存在服务器端,存储在服务端,安全性高

存储方式的不同?

  • Cookie只能保存ASCII
  • Session可以存任意数据类型,比如下面的session认证存了一个用户名信息进去

有效期不同?

  • Cookie可以长时间保持,如默认登录
  • Session一般失效时间较短,如客户端关闭、session超时都会失效。

存储大小不同? 单个Cookie保存数据不能超过4k,Session可存储数据远高于Cookie

解决

前端部分
axios.defaults.withCredentials = true;// 允许跨域携带cookie
后端
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        //设置 允许cookie
        corsConfiguration.setAllowCredentials(true);
        UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
        urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsFilter(urlBasedCorsConfigurationSource);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值