有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何启用以cookie为条件的按钮?

我正在构建一个web应用程序,它可以接受来宾和注册用户。对于注册用户,在他们登录后,我只想为他们显示一个“注销”按钮。我想让它出现,如果有一个cookie,这表明用户已登录。有一个带有登录表单的JSP,它重定向到GET POST方法(servlet),并创建一个发送到浏览器的cookie

我的问题是:如何将按钮的存在与证明用户状态的cookie的存在关联起来?它是在JSP端还是在servlet端

使用cookies是正确的方法还是使用会话更好


共 (1) 个答案

  1. # 1 楼答案

    我仔细搜索,找到了一个可能的答案

    我能做的就是使用浏览器中jsp文件中的java代码获取令牌,并用它获取登录者的电子邮件。通过检查电子邮件是否为空,我可以查看是否有用户登录

    我可以在jsp文件中使用以下示例:

    <% 
      String email = LoginDao.getToken(request.getCookies());
        if (email != null) {
     %>
    

    洛金多。getToken是一种在cookie中分离电子邮件的方法

    public static String getToken(Cookie[] cookies) throws SQLException {
        String cookieData = null;
        String email = null;
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals("token")) {
                    cookieData = cookie.getValue();
                }
    
            }
            if (cookieData != null) {
                email = getEmailCookie(cookieData);
            }
        }
        return email;
    }
    

    在getEmalCookie的帮助下:

    public static String getEmailCookie(String cookieData) throws SQLException {
    
        String[] splitCookie = cookieData.split("&&&&&");
        String passAndCookieSalt = splitCookie[0];
        String email = splitCookie[1];
        String cookieSalt = splitCookie[2];
    
        String databaseData = Queries.getPassword(email);
    
        if(databaseData != null) {
            String[] splitDatabase = databaseData.split("&&&&&");
                if (splitDatabase.length >= 2) {
                    String passwordSalt = splitDatabase[1];
    
                    if (Password.hashString(passwordSalt + "&&&&&" + cookieSalt).equals(passAndCookieSalt)) {
                        return email;
                    } else {
                        return null;
                    }
                } else {
                    return null;
                }
        } else {
            return null;
        }
    

    询问。调用getPassword(email)从数据库获取电子邮件,并使用(Password.hashString(passwordSalt+“&;&;&;&;”+cookieSalt),因此将其与浏览器中的pass和cookie salt进行比较