Heim  >  Artikel  >  Web-Frontend  >  So deaktivieren Sie Cookies und lösen das Problem der Sitzungs- und Cookie-Zerstörung nach dem Schließen des Browsers

So deaktivieren Sie Cookies und lösen das Problem der Sitzungs- und Cookie-Zerstörung nach dem Schließen des Browsers

零下一度
零下一度Original
2017-05-18 11:54:545585Durchsuche

Cookie und Session werden im Allgemeinen als zwei unabhängige Dinge betrachtet. Session verwendet eine Lösung, die den Status auf der Serverseite verwaltet, während Cookie eine Lösung verwendet, die den Status auf der Clientseite verwaltet. Aber warum kann ich die Sitzung nicht erhalten, wenn ich Cookies deaktiviere? Da die Sitzung die Sitzungs-ID verwendet, um die Serversitzung zu ermitteln, die der aktuellen Konversation entspricht, und die Sitzungs-ID über Cookie weitergeleitet wird, entspricht das Deaktivieren von Cookies dem Verlust der Sitzungs-ID, und Sie erhalten keine Sitzung.

Wie kann ich Cookies deaktivieren?

1. Starten Sie IE
2. Klicken Sie im Menü „Extras“ auf „Internetoptionen“, um das Dialogfeld „Internetoptionen“ zu öffnen.
3. Klicken Sie auf „Datenschutz“. ”-Tab und bewegen Sie den Schieberegler nach oben auf eine höhere Datenschutzstufe. Wenn Sie nach oben gehen, wählen Sie „Alle Cookies blockieren“. Zu diesem Zeitpunkt blockiert das System die Cookies aller Websites und die Website kann die Cookies, die sich bereits auf dem Computer befinden, nicht lesen. Taste.

Die Sitzungs-ID wird im Cookie gespeichert. Die Lösung lautet wie folgt: Sitzung
URL-Umschreibung, um sicherzustellen, dass der Client COOKIE deaktiviert oder nicht unterstützt , es kann immer noch verwendet werden Sitzung

Sitzungsmechanismus. Der Sitzungsmechanismus ist ein serverseitiger Mechanismus. Der Server verwendet eine Struktur ähnlich einer Hash-Tabelle (oder verwendet möglicherweise eine Hash-Tabelle), um Informationen zu speichern.

Wenn das Programm eine Sitzung für die Anfrage eines Clients erstellen muss, prüft der Server zunächst, ob die Anfrage des Clients bereits eine Sitzungskennung (sogenannte Sitzungs-ID) enthält. Wenn dies der Fall ist, bedeutet dies, dass sie bereits erstellt wurde . Dieser Client hat eine Sitzung erstellt und der Server ruft die Sitzung entsprechend der Sitzungs-ID ab (wenn sie nicht abgerufen werden kann, erstellt er eine neue Sitzung). Für den Client erstellt und eine Sitzung damit generiert. Der Wert der Sitzungs-ID sollte eine

Zeichenfolge sein, die nicht wiederholt wird und nicht einfach gefunden und kopiert werden kann. Diese Sitzungs-ID wird am Ende in dieser Antwort an den Client zurückgegeben. Die Methode zum Speichern dieser Sitzungs-ID kann Cookies verwenden, sodass der Browser diese Identifikation während des Interaktionsprozesses automatisch gemäß den Regeln dem Server anzeigen kann. Im Allgemeinen ähnelt der Name dieses Cookies SEEESIONID. Cookies können jedoch künstlich deaktiviert werden, und es müssen andere Mechanismen vorhanden sein, um die Sitzungs-ID trotzdem an den Server zurückzugeben, wenn Cookies deaktiviert sind. Eine häufig verwendete Technik ist das sogenannte URL-Rewriting, bei dem die Sitzungs-ID direkt an das Ende des URL-Pfads angehängt wird. Es gibt auch eine Technik namens Form Hidden Fields. Das heißt, der Server ändert das Formular automatisch und fügt ein ausgeblendetes Feld hinzu, sodass die Sitzungs-ID beim Absenden des Formulars an den Server zurückgegeben werden kann.

【Beispiel für das Umschreiben von URLs】

package session;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class WelcomeServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        request.getSession();

        String url1 = response.encodeURL("/Session/servlet/SessionDemo1");//禁用cookie才重写,注意禁用cookie后,访问要用127.0.0.1,不能用localhost
        String url2 = response.encodeURL("/Session/servlet/SessionDemo2");        //禁用cookie之后无法解决关闭浏览器能重新访问的问题。
        out.println("<a href=&#39;"+url1+"&#39;>购买  </a>");
        out.println("<a href=&#39;"+url2+"&#39;>结账</a>");
    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {
        doGet(request, response);
    }

}
package session;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;//购买 index.jsp index.html//session基于cookiepublic class SessionDemo1 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {
        HttpSession session = request.getSession(); //Session创建
        //request.getSession(false);    //不创建session,只获取session  例如:显示购物车

        //解决浏览器关闭后cookie销毁的问题:
        String sessionid = session.getId();
        Cookie cookie = new Cookie("JSESSIONID",sessionid);
        cookie.setPath("/Session");
        cookie.setMaxAge(30*60);
        response.addCookie(cookie);

        session.setAttribute("name", "洗衣机");        //30分钟没使用之后(不管有无关闭浏览器),Session才销毁(默认,可控制时间)
        //配置方法:在web.xml文件中配置<session-config>里面配置一个<session-timeout>并且设置时间值
        //代码摧毁方法:session.invalidate();
    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {
        doGet(request, response);
    }

}
----------//解决浏览器关闭后session销毁的问题:String sessionid = session.getId();
Cookie cookie = new Cookie("JSESSIONID",sessionid);
cookie.setPath("/Session");
cookie.setMaxAge(30*60);
response.addCookie(cookie);

【解决浏览器关闭后session销毁的原因】:
sessionId是一个cookie,max-age默认为-1,即关闭浏览器后sessionId就会清空 
sessionId(cookie)清空后,自然就无法找到对应的session,所以session就失效了

【解决方法】:
设置上述代码,添加cookie的失效时间,        30分钟没使用之后(不管有无关闭浏览器),Session才销毁(默认,可控制时间)
        其他session失效时间配置方法:在web.xml文件中配置<session-config>里面配置一个<session-timeout>并且设置时间值
        代码摧毁方法:session.invalidate();

----------package session;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;//结账public class SessionDemo2 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        HttpSession session = request.getSession();
        String product = (String)session.getAttribute("name");
        out.write("你购买的商品是:"+product);

    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {
        doGet(request, response);
    }

}
Das Umschreiben von URL-Adressen ist eine Lösung für Kunden, die keine Cookies unterstützen. Das Prinzip des Umschreibens von URL-Adressen besteht darin, die Sitzungs-ID-Informationen des Benutzers in die URL-Adresse umzuschreiben. Der Server kann die neu geschriebene URL analysieren, um die Sitzungs-ID zu erhalten. Auf diese Weise kann die Sitzung zum Aufzeichnen des Benutzerstatus verwendet werden, auch wenn der Client Cookies nicht unterstützt. Die HttpServletResponse-Klasse stellt encodeURL (String-URL) bereit, um das Umschreiben von URL-Adressen zu implementieren. Diese Methode ermittelt automatisch, ob der Client Cookies unterstützt. Wenn der Client Cookies unterstützt, wird die URL intakt ausgegeben. Wenn der Client keine Cookies unterstützt, wird die Sitzungs-ID des Benutzers in die URL umgeschrieben.

Hinweis: TOMCAT bestimmt, ob der Client-Browser Cookies unterstützt, basierend darauf, ob die Anfrage Cookies enthält, in der ersten Anfrage werden jedoch keine Cookies übertragen > (da keine Cookies übertragen werden müssen), enthält die URL-Adresse nach dem Umschreiben immer noch JSESSIONID. Beim zweiten Zugriff hat der Server das Cookie bereits in den Browser geschrieben, sodass die URL-Adresse nach dem Umschreiben keine JSESSIONID enthält. [Verwandte Empfehlungen]

1.
Detaillierte Erläuterung der Beispiele für den Js-Cookie-Betrieb (Einstellen, Lesen, Löschen)

2. Was sind Cookies? Wofür werden Cookies verwendet?

Das obige ist der detaillierte Inhalt vonSo deaktivieren Sie Cookies und lösen das Problem der Sitzungs- und Cookie-Zerstörung nach dem Schließen des Browsers. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn