如何终止Windows上的PHP会话关闭?

时间:2015-12-25 12:04:25

标签: php mysql session simpleusers

我使用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

         }
}

但它没有帮助。 请帮帮我。

1 个答案:

答案 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.
}