我正在尝试提供一种机制来检查用户是否已登录,因为我的Web服务上的某些页面仅供注册用户使用。我的想法在以下伪代码中形式化。
void login(username, password)
{
if (username == db.user.username && password == db.user.password)
username.session = startSession(username);
else
response.redirect("/login");
}
String startSession(String username)
{
String sessionID = encoder.encode(randomBytes, username); /* generates
a random session id*/
mysql.session_table.insert(username, sessionID); /* save the session
id to session table */
return sessionID;
}
String getSession(String username)
{
return username.session;
}
boolean isSessionNew(sessionID)
{
if (sessionID.age > threshold)
return false;
else
return true;
}
基本上,当用户成功登录时,我将生成随机会话ID(startSession方法),并将sessionID,用户名及其创建的时间戳保存到mysql数据库表" session&#34 ;。当用户访问受保护的网页时,该页面将检查用户是否具有有效的会话ID(按会话的年龄)。
我对这种设计的担忧是,与数据库通信可能会产生太多的开销。是否有更简单,更安全的方式来跟踪用户登录会话?
答案 0 :(得分:1)
会话跟踪是一项非常常见的任务......您有一个HttpSession对象(javadocs),您可以在其中存储属性。您还可以找到有关HttpSessionContext对象的所有有效会话。
这是一个快速的啧啧:http://www.tutorialspoint.com/servlets/servlets-session-tracking.htm