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
【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='"+url1+"'>购买 </a>"); out.println("<a href='"+url2+"'>结账</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); } }
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!