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

时间:2018-06-21 10:48:51

标签: java html jsp servlets cookies

我正在构建一个可以接受访客和注册用户的Web应用程序。对于注册用户,在他们登录后,我只想为他们显示“注销”按钮。我在考虑是否有一个Cookie指示用户已登录。如果有一个JSP,它带有登录表单,该表单将重定向到GET POST方法(servlet)并创建一个发送给浏览器的cookie。

我的问题:如何将按钮的存在与可以证明用户状态的cookie的存在相关联?是在JSP方面还是在servlet方面?

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

1 个答案:

答案 0 :(得分:0)

我实际上进行了搜索,找到了可能的答案。

我能做的是从浏览器中使用jsp文件中的java代码获取令牌,并借此获得登录人员的电子邮件。通过检查电子邮件是否为空,我可以查看是否有一个用户登录。

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

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

LoginDao.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;
    }

调用Queries.getPassword(email)从数据库中获取电子邮件并使用(Password.hashString(passwordSalt +“ &&&&&” + cookieSalt)对其进行散列,然后将其与浏览器中的pass和cookie盐进行比较。 / p>