为啥刷新一下页面SessionID会变

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥刷新一下页面SessionID会变相关的知识,希望对你有一定的参考价值。

jsp刷新有新的session是因为浏览器的cookie发生了变化,导致无法跟之前创建的session保持一致性导致的。
jsp中对应的cookie操作:

HttpCookie cookie = new HttpCookie("userName");
cookie.Value = userName;
cookie.Expires = DateTime.Now.AddHours(2);
Response.Cookies.Add(cookie);

第一行:创建一个HttpCookie对象,然后构造函数 给个cookie名称
第二行:给这个cookie赋值---->因为cookie是以键值对存储的 ex:userName = “admin”
第三行:设置此cookie的失效时间,此值是一个具体的失效时间datetime类型 上面是设置两个小时后失效
第四行:将cookie写到cookie中。
注意:
1. 因为Cookice是存储在客户端的数据,如果有敏感的数据必须在服务端加密后然后在保存
2. Cookice在客户端有两种保存形式:(1)保存在硬盘上(设置了cookice的失效时间的情况下) (2)保存在内存中(在没有设置cookice的失效时间的情况下)
3. 如果服务端的cookice和客户端已有的cookice重名则会覆盖原有的cookice
4. 如果要想清除某个cookice的话可是设置它的失效时间小于当前的日期即可cookie.Expires = DateTime.Now.AddDays(-1);
参考技术A 这个应该是你的电脑中毒了或者中马了,所以刷新页面会变动ID,也可能是你同时登陆了不同ID,页面默认最后登陆的那个ID,实际已经改变只是没有刷新页面没有改变而已

为啥 keycloak 在页面刷新时未经授权?

【中文标题】为啥 keycloak 在页面刷新时未经授权?【英文标题】:Why keycloak gets unauthorized on page refresh?为什么 keycloak 在页面刷新时未经授权? 【发布时间】:2021-06-22 00:25:34 【问题描述】:

当我刷新页面时,我已经成功地将 keycloak 与 reactJS 集成。keycloak.authenticate get false 并再次询问凭据。 我也在互联网上搜索,他们建议在 initOptions 道具中传递令牌和刷新令牌,我已经这样做了,但仍然面临同样的问题。

我正在使用“@react-keycloak/web”:“^2.1.1”和“keycloak-js”:“^10.0.1”

这是我的 Keycloak.js 代码


import * as Keycloak from 'keycloak-js';

const keycloakConfig = 
   url: 'https://smartgrid.doersops.com/auth/',
   realm: 'OneSmartgrid',
   clientId: 'smartgrid-react-web-admin',


const keycloak = new Keycloak(keycloakConfig);

export default keycloak

这是我的 App.js 代码

import React from 'react';
import  KeycloakProvider  from '@react-keycloak/web'
import keycloak from './keycloak';
import  AppRouter   from './routes';
function App() 
  const token = localStorage.getItem('token');
  const refreshToken = localStorage.getItem('refreshToken');

  const setTokens = (token, idToken, refreshToken) => 
    localStorage.setItem('token', token);
    localStorage.setItem('refreshToken', refreshToken);
    localStorage.setItem('idToken', idToken);
  
  return (
    <KeycloakProvider 
      keycloak=keycloak
      onTokens=
          (tokens:  keycloakTokens) => 
          setTokens(tokens.token ?? '', tokens.idToken ?? '', tokens.refreshToken ?? '')
        
      initOptions= onLoad: 'login-required', token, refreshToken 
      >
      <AppRouter />
    </KeycloakProvider>
  )


export default App;

【问题讨论】:

【参考方案1】:

我正在回答我自己的问题,实际上我必须从 keycloak 管理面板更改设置。从侧面菜单中单击身份验证并从下拉菜单中选择浏览器。

【讨论】:

以上是关于为啥刷新一下页面SessionID会变的主要内容,如果未能解决你的问题,请参考以下文章

Session存储

应用程序中,页面跳转时,为啥SessionID发生了改变?

为啥不重用“ASP.NET_SessionId”?

为啥codeigniter会变慢?

根据sessionID判断用户是否登陆

为啥vue中子路由点击router-link只能刷新一次子页面?