我使用SimpleUsers Class并创建了一个基于数据库的登录系统。 Here is SimpleUsers on Github
这是我的问题: 如何终止Windows上的PHP会话关闭?当窗口关闭时,已登录用户的会话已打开。我怎么能关闭它? 我试着用
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = null;
try{
//--- Determine Content Type ---
response.setContentType("text/html");
//--- Get Writer ---
out = response.getWriter();
if (request.getParameter("action").equals("1")) //display form with errors if exists
{
String error = "";
//--- names of cookies to look for ---
String emptyFiledsCookieName = "erorrEmpty";
String notAlphanumericCookieName = "errorNotAlphanumeric";
Cookie[] cookies = request.getCookies();
if (cookies != null)
{
for(Cookie cookie: cookies)
{
if (emptyFiledsCookieName.equals(cookie.getName()) || notAlphanumericCookieName.equals(cookie.getName()) )
{
error=error+ cookie.getValue() +"\n";
}
}
for(Cookie cookie: cookies)
{
if (emptyFiledsCookieName.equals(cookie.getName()) || notAlphanumericCookieName.equals(cookie.getName()) )
{
cookie.setMaxAge(0);
}
}
}
out.println("<html><head><title>");
out.println("compose message</title>");
out.println("<meta charset=\"UTF-8\">");
out.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">");
out.println("</head><body>");
//--- Print Errors ---
out.println(error);
out.println("<form action=\"MsgServlet\" method=\"POST\" id=\"usrform\">");
out.println("<p>username:</p>");
out.println("<input type=text name=userName><br>");
out.println("<input type=submit value=\"post\"></form>");
out.println("<br><p>message:</p><textarea rows=\"4\" cols=\"50\" name=\"comment\" form=\"usrform\"></textarea>");
out.println("</body></html>");
}
else if (request.getParameter("action").equals("2"))
{
//display messages
}
}
但它没有帮助。 请帮帮我。
答案 0 :(得分:1)
我认为通过&#34; windows&#34;你的意思是网页浏览器浏览器/窗口的标签。
简单的诉讼是:除非用户请求,否则你不能这样做。您可以使用&#34; onclose&#34;尝试某种javascript代码。将请求发送到您的站点以关闭会话的方法。 此方法的缺点是当有人有2个标签并且最后一个被关闭时,他将被注销
只有当有人点击退出按钮时,您才应该销毁会话。
编辑评论
如果您想要保护(绑定)会话到IP,您可能希望存储在启动会话的用户的$_SESSION
IP中,并在IP更改时终止会话
if($_SESSION['user_ip'] !== $_SERVER['REMOTE_ADDR']){
// do the code to terminate session.
}