缓存我怎么确保当前用户信息在后边使用的是我想要的当前用户呢

我在做一个项目中遇到了个问题我这里不做登录
一个用户通过点击页面前台通过免密登录获取到code免登授权码我后台可以通过code获取到用户信息 为了复用我做成全局变量
问题产生了 多个用户点击存储了很多信息
这个全局变量中我可以拿到不同用户的信息么?我怎么确保当前用户信息在后边使用的是我想要的当前用户呢

通过点击页面前台通过免密登录获取到code免登授权码,然后在后台通过code获取到用户信息。为了确保当前用户信息在后边使用的是你想要的当前用户,可以将用户信息存储在后台的Session中,而不是全局变量中。Session是一种服务器端的存储机制,可以将数据存储在服务器端,以便在后续的请求中进行读取和使用。将用户信息存储在Session中,可以确保每个用户只能访问自己的信息,而不会访问其他用户的信息。
具体来说,可以在后台通过code获取到用户信息后,将用户信息存储在Session中。例如,在Java Web应用中,可以使用HttpServletRequest对象的getSession()方法获取到当前请求的Session对象,并使用Session对象的setAttribute()方法将用户信息存储到Session中。
// 获取到当前请求的Session对象
HttpSession session = request.getSession();
// 将用户信息存储到Session中
session.setAttribute("userinfo", userinfo);
在后续的请求中,可以通过HttpServletRequest对象的getSession()方法获取到当前请求的Session对象,并使用Session对象的getAttribute()方法获取到之前存储的用户信息,如下所示:
// 获取到当前请求的Session对象
HttpSession session = request.getSession();
// 获取Session中存储的用户信息
UserInfo userinfo = (UserInfo)session.getAttribute("userinfo");

内容来源与ChatGpt4及newbing和百度:


你可以将用户信息存在Session中,每个用户的Session存储在服务器端,确保用户信息不会被其他用户访问到。在获取用户信息时,先获取当前用户的Session,再从Session中获取用户信息。下面是一个示例代码:

// 存储用户信息到Session中
HttpSession session = request.getSession();
session.setAttribute("user_info", userInfo);

// 获取用户信息
HttpSession session = request.getSession();
UserInfo userInfo = (UserInfo) session.getAttribute("user_info");

这样可以确保每个用户只能访问自己的信息,而不会被其他用户访问到。另外,为了防止Session被盗取,可以在存储用户信息到Session中时,对用户信息进行加密处理。在获取用户信息时,再进行解密处理。


祝您问题迎刃而解

用cookie 存储个uuid然后查询这个uuid的缓存

每个用户免密登录的code是一样的还是不一样的?

有个 东西叫 ThreadLocal

您可以使用一个字典(dictionary)或者映射(map)来存储每个用户的信息。在每个用户登录时,将其信息存储在字典中,并使用一个唯一的标识符作为键(例如用户ID),以便在后续的请求中可以根据标识符来获取对应的用户信息。

例如,您可以使用Python中的字典来实现:

user_info = {}

# 用户登录时,将其信息存储在字典中
def login(user_id, user_data):
    user_info[user_id] = user_data

# 在后续请求中,根据用户ID获取对应的用户信息
def get_user_info(user_id):
    return user_info.get(user_id, None)

在上述示例代码中,我们使用了一个名为user_info的字典来存储每个用户的信息。在用户登录时,我们调用login函数将其信息存储在字典中,并使用用户ID作为键。在后续请求中,我们调用get_user_info函数根据用户ID获取对应的用户信息。

另外,为了确保当前用户信息在后续使用中是正确的,您可以在每个请求中将当前用户ID作为参数传递,并在后台根据该ID获取对应的用户信息。这样可以确保在后续使用中使用的是当前用户的信息。

对于这个问题,为了确保当前用户信息在后面使用的是想要的当前用户,可以考虑将全局变量设计为一个Map类型,以免登授权码code作为key,用户信息作为value进行存储。

Java代码如下:

public class UserInformation {
    private static Map<String, UserInfo> userMap = new ConcurrentHashMap<>(); // 采用并发安全的ConcurrentHashMap实现
    
    /**
     * 存储用户信息
     *
     * @param code     免登授权码
     * @param userInfo 用户信息
     */
    public static void setUser(String code, UserInfo userInfo) {
        userMap.put(code, userInfo);
    }

    /**
     * 获取指定code对应的用户信息
     *
     * @param code 免登授权码
     * @return 用户信息
     */
    public static UserInfo getUser(String code) {
        return userMap.get(code);
    }
}


在代码中,我们定义了一个静态变量userMap,用来存放用户信息。其中,setUser方法用于往userMap中存储用户信息,getUser方法根据传入的免登授权码code从userMap中获取对应的用户信息。

当用户在页面中通过免密登录获取到code免登授权码并且在后端中成功获取到用户信息后,我们可以调用setUser方法将code和userInfo存入userMap中。后续需要使用该用户信息时,只需要调用getUser方法获取即可。

这样,每个用户的信息都会被存储在独立的Map中,不同用户之间互不干扰,确保了当前用户信息在后面使用时是我们想要的。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
针对您的问题,我可以提供以下解答和思路:

  1. 如何确保存储的是当前用户的信息?

在程序中,可以使用session来存储用户信息,同时,在程序中应该用一个key来区分不同用户的session信息,比如使用用户的id作为key。这样,就可以确保存储的信息是当前用户的信息。代码示例:

from flask import Flask, session, request

app = Flask(__name__)
app.secret_key = 'your-secret-key'

@app.route('/set_user_info', methods=['POST'])
def set_user_info():
    user_id = request.form['user_id']
    user_name = request.form['user_name']
    session[user_id] = {
        'user_name': user_name,
        # 其他用户信息
    }
    return 'success'

@app.route('/get_user_info', methods=['GET'])
def get_user_info():
    user_id = request.args.get('user_id')
    user_info = session.get(user_id)
    if user_info is None:
        return 'user does not exist'
    return user_info['user_name']

在上述代码中,通过使用session和不同的key,可以确保不同用户的信息不会混淆。

  1. 如何确保在后续使用中获取到的是正确的用户信息?

在程序中,可以通过每次请求获取到的参数或者cookie中包含的用户信息来确定当前用户,然后根据用户id从session中获取对应的用户信息。如果需要保证并发安全,可以使用线程锁或者进程锁来避免多个线程或进程同时访问session导致数据混乱的问题。代码示例:

from flask import Flask, session, request
import threading

app = Flask(__name__)
app.secret_key = 'your-secret-key'
lock = threading.Lock()

@app.route('/set_user_info', methods=['POST'])
def set_user_info():
    user_id = request.form['user_id']
    user_name = request.form['user_name']
    session[user_id] = {
        'user_name': user_name,
        # 其他用户信息
    }
    return 'success'

@app.route('/get_user_info', methods=['GET'])
def get_user_info():
    user_id = request.args.get('user_id')
    with lock:
        user_info = session.get(user_id)
    if user_info is None:
        return 'user does not exist'
    return user_info['user_name']

在上述代码中,使用了线程锁来保证session的并发安全。

希望这些思路和代码片段可以为您提供一些帮助,如果有其他问题,欢迎随时提出。
如果我的回答解决了您的问题,请采纳!