我正在构建一个可以接受访客和注册用户的Web应用程序。对于注册用户,在他们登录后,我只想为他们显示“注销”按钮。我在考虑是否有一个Cookie指示用户已登录。如果有一个JSP,它带有登录表单,该表单将重定向到GET POST方法(servlet)并创建一个发送给浏览器的cookie。
我的问题:如何将按钮的存在与可以证明用户状态的cookie的存在相关联?是在JSP方面还是在servlet方面?
使用cookie是正确的方法还是使用会话会更好?
答案 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>