请问关闭浏览器 session是不是被销毁

时间:2021-05-10 13:14:39

如题,请问关闭浏览器  session是不是被销毁,session的主要应用有哪些啊?

14 个解决方案

#1


应该不会 有时使系统故障

#2


quote=引用 1 楼 xw99999 的回复:]
应该不会 有时使系统故障[/quote我试验过了怎么是本销毁的
第一次打开是如下图:
请问关闭浏览器 session是不是被销毁[
关闭重新打开如下图:
请问关闭浏览器 session是不是被销毁
两个图的会话ID明显不同
代码:
package pge;

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;
import java.util.*;
public class SessionServlet extends HttpServlet {

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

response.setContentType("text/html;charset=gb2312");
HttpSession session = request.getSession(true);
String heading = null;
Integer accessCount = (Integer) session.getAttribute("accessCount");
if (session.getAttribute("accessCount") == null) {
accessCount = new Integer(1);
heading = "欢迎您首次登陆这个页面";
} else {
heading = "欢迎您再次登陆这个页面";
accessCount = accessCount + 1;
}
session.setAttribute("accessCount", accessCount);
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("  <HEAD><TITLE>session tracking example</TITLE></HEAD>");
out.println("  <BODY>");
out.println("  <center>");
out.println("<h4>" + heading + "<a href='session'>再次访问</a>"
+ "</h4>");
out.println("<table border='0'>");
out.println("<tr bgcolor=\"ffad00\"><td>信息<td>值\n");
String state = session.isNew() ? "新会话" : "旧会话";
out.println("<tr><td>会话状态:<td>" + state + "\n");
out.println("<tr><td>会话ID:<td>" + session.getId() + "\n");
out.println("<tr><td>创建时间:<td>");
out.println("" + new Date(session.getCreationTime()) + "\n");
out.println("<tr><td>最近访问时间:<td>");
out.println("" + new Date(session.getLastAccessedTime()) + "\n");
out.println("<tr><td>最大不活动时间:<td>" + session.getMaxInactiveInterval()
+ "\n");
out.println("<tr><td>Cookie:<td>" + request.getHeader("Cookie") + "\n");
out.println("<tr><td>已被访问次数:<td>" + accessCount + "\n");
out.println("</table>");
out.println("  </center>");
out.println("  </BODY>");
out.println("</HTML>");
out.flush();
out.close();

}
}

#3


没有关闭 但是找不到了 好像在cookie中绑定 才能找到原来的session

#4


[/img]
引用 1 楼 xw99999 的回复:
应该不会 有时使系统故障

搞错了<session-config>
<session-timeout>1</session-timeout>
</session-config>
我时间设短,只有60秒,
请问关闭浏览器 session是不是被销毁

#5


关了重新打开 session 就重新创建了 你的图片 显示的是cookie吧

#6


关闭浏览器后,默认会在服务器中保存30分钟,没被使用则自动销毁。如果要手动销毁需要在web.xml中设置session的生存周期或者在servlet中调用session.invalidate()方法销毁。

#7


服务器会为每个用户浏览器创建一个会话对象即session对象,是在服务器端进行数据保存。例如将用户购买的商品存入session进行结账。session可以实现一个会话中的数据共享:在a.servlet中写入数据session.setAttribute(String name,Obj value);在b.servlet中可以获得写入的数据:Obj value = session.getAttribute(name);

#8


引用 6 楼 a1257427517 的回复:
关闭浏览器后,默认会在服务器中保存30分钟,没被使用则自动销毁。如果要手动销毁需要在web.xml中设置session的生存周期或者在servlet中调用session.invalidate()方法销毁。
我关了浏览器 session就销毁了,时间我设置50分钟。代码在上面,可以帮我实验一下吗。我也觉得奇怪,不是说session留在内存中的吗,关了浏览器(全部关)怎么么会被销毁呢?

#9


引用 5 楼 u010593193 的回复:
关了重新打开 session 就重新创建了 你的图片 显示的是cookie吧

不是cookie,你可以看一下代码,很简单的。

#10


相对于cookie,session更安全,保存的数据量更大,
保存的数据类型更丰富。但是,相对于cookie将状态写在
客户端,session会将状态保存在服务器端,服务器的数据
压力会更大,另外,session默认情况下,会将sessionId
保存在浏览器对应的内存空间里面,如果关闭浏览器,session
会失效。所以,对于比较复杂的状态管理问题,我们会同时
使用cookie和session。
session的几个常用的方法
String session.getId(); //返回sessionId
//绑订一个对象到session。
session.setAttribute(String name,Object obj);
//依据绑订名找到绑订值,注意有可能返回null。
Object session.getAttribute(String name);
//解除绑订
session.removeAttribute(String name);

如果关闭浏览器还想获得原来浏览器里的数据 可以将数据保存到cookie上:
CookieUtil.addCookie("cart", cart.store(), response);

public class CookieUtil {
private static int age = 3600 * 24; //缺省的生存时间
private static String path = "/shoppingcart02"; 
//应用名,如果要将该工具用在其它的应用当中,需要
//修改这个值。

/**
 * 添加cookie,考虑了编码、生存时间、路径问题。
 */
public static void addCookie(String name,
String value,int age,HttpServletResponse 
response) throws 
UnsupportedEncodingException{
Cookie c = new Cookie(name,
URLEncoder.encode(value,"utf-8"));
c.setMaxAge(age);
c.setPath(path);
response.addCookie(c);
}
//从cookie中取出数据
/**
 * 依据cookie的名称返回cookie的值,如果
 * 找不到对应的cookie,返回null。
 * @throws UnsupportedEncodingException 
 */
public static String findCookie(String name,
HttpServletRequest request) throws UnsupportedEncodingException{
String value = null;
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(int i=0;i<cookies.length;i++){
Cookie c = cookies[i];
if(c.getName().equals(name)){
value = URLDecoder.decode(
c.getValue(),"utf-8");
}
}
}
return value;
}

#11


这个写的很详细顺便挣点积分

#12


http://alone-knight.iteye.com/blog/1611112。。刚才那个貌似连接错了

#13


引用 6 楼 a1257427517 的回复:
关闭浏览器后,默认会在服务器中保存30分钟,没被使用则自动销毁。如果要手动销毁需要在web.xml中设置session的生存周期或者在servlet中调用session.invalidate()方法销毁。

是开着浏览器的时候 服务器默认保存30分钟 默认关闭浏览器 session 就销毁

#14


引用 13 楼 u010593193 的回复:
Quote: 引用 6 楼 a1257427517 的回复:

关闭浏览器后,默认会在服务器中保存30分钟,没被使用则自动销毁。如果要手动销毁需要在web.xml中设置session的生存周期或者在servlet中调用session.invalidate()方法销毁。

是开着浏览器的时候 服务器默认保存30分钟 默认关闭浏览器 session 就销毁

是session30分钟没人使用才会自动销毁,和关不关浏览器没有关系,你想关了浏览器在开浏览器还用开始那个session,就必须设置cookie的有效时间最短为30分钟。30分钟前访问就会带seeeion的id号过来,这样就能使用开始那个session了。

#1


应该不会 有时使系统故障

#2


quote=引用 1 楼 xw99999 的回复:]
应该不会 有时使系统故障[/quote我试验过了怎么是本销毁的
第一次打开是如下图:
请问关闭浏览器 session是不是被销毁[
关闭重新打开如下图:
请问关闭浏览器 session是不是被销毁
两个图的会话ID明显不同
代码:
package pge;

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;
import java.util.*;
public class SessionServlet extends HttpServlet {

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

response.setContentType("text/html;charset=gb2312");
HttpSession session = request.getSession(true);
String heading = null;
Integer accessCount = (Integer) session.getAttribute("accessCount");
if (session.getAttribute("accessCount") == null) {
accessCount = new Integer(1);
heading = "欢迎您首次登陆这个页面";
} else {
heading = "欢迎您再次登陆这个页面";
accessCount = accessCount + 1;
}
session.setAttribute("accessCount", accessCount);
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("  <HEAD><TITLE>session tracking example</TITLE></HEAD>");
out.println("  <BODY>");
out.println("  <center>");
out.println("<h4>" + heading + "<a href='session'>再次访问</a>"
+ "</h4>");
out.println("<table border='0'>");
out.println("<tr bgcolor=\"ffad00\"><td>信息<td>值\n");
String state = session.isNew() ? "新会话" : "旧会话";
out.println("<tr><td>会话状态:<td>" + state + "\n");
out.println("<tr><td>会话ID:<td>" + session.getId() + "\n");
out.println("<tr><td>创建时间:<td>");
out.println("" + new Date(session.getCreationTime()) + "\n");
out.println("<tr><td>最近访问时间:<td>");
out.println("" + new Date(session.getLastAccessedTime()) + "\n");
out.println("<tr><td>最大不活动时间:<td>" + session.getMaxInactiveInterval()
+ "\n");
out.println("<tr><td>Cookie:<td>" + request.getHeader("Cookie") + "\n");
out.println("<tr><td>已被访问次数:<td>" + accessCount + "\n");
out.println("</table>");
out.println("  </center>");
out.println("  </BODY>");
out.println("</HTML>");
out.flush();
out.close();

}
}

#3


没有关闭 但是找不到了 好像在cookie中绑定 才能找到原来的session

#4


[/img]
引用 1 楼 xw99999 的回复:
应该不会 有时使系统故障

搞错了<session-config>
<session-timeout>1</session-timeout>
</session-config>
我时间设短,只有60秒,
请问关闭浏览器 session是不是被销毁

#5


关了重新打开 session 就重新创建了 你的图片 显示的是cookie吧

#6


关闭浏览器后,默认会在服务器中保存30分钟,没被使用则自动销毁。如果要手动销毁需要在web.xml中设置session的生存周期或者在servlet中调用session.invalidate()方法销毁。

#7


服务器会为每个用户浏览器创建一个会话对象即session对象,是在服务器端进行数据保存。例如将用户购买的商品存入session进行结账。session可以实现一个会话中的数据共享:在a.servlet中写入数据session.setAttribute(String name,Obj value);在b.servlet中可以获得写入的数据:Obj value = session.getAttribute(name);

#8


引用 6 楼 a1257427517 的回复:
关闭浏览器后,默认会在服务器中保存30分钟,没被使用则自动销毁。如果要手动销毁需要在web.xml中设置session的生存周期或者在servlet中调用session.invalidate()方法销毁。
我关了浏览器 session就销毁了,时间我设置50分钟。代码在上面,可以帮我实验一下吗。我也觉得奇怪,不是说session留在内存中的吗,关了浏览器(全部关)怎么么会被销毁呢?

#9


引用 5 楼 u010593193 的回复:
关了重新打开 session 就重新创建了 你的图片 显示的是cookie吧

不是cookie,你可以看一下代码,很简单的。

#10


相对于cookie,session更安全,保存的数据量更大,
保存的数据类型更丰富。但是,相对于cookie将状态写在
客户端,session会将状态保存在服务器端,服务器的数据
压力会更大,另外,session默认情况下,会将sessionId
保存在浏览器对应的内存空间里面,如果关闭浏览器,session
会失效。所以,对于比较复杂的状态管理问题,我们会同时
使用cookie和session。
session的几个常用的方法
String session.getId(); //返回sessionId
//绑订一个对象到session。
session.setAttribute(String name,Object obj);
//依据绑订名找到绑订值,注意有可能返回null。
Object session.getAttribute(String name);
//解除绑订
session.removeAttribute(String name);

如果关闭浏览器还想获得原来浏览器里的数据 可以将数据保存到cookie上:
CookieUtil.addCookie("cart", cart.store(), response);

public class CookieUtil {
private static int age = 3600 * 24; //缺省的生存时间
private static String path = "/shoppingcart02"; 
//应用名,如果要将该工具用在其它的应用当中,需要
//修改这个值。

/**
 * 添加cookie,考虑了编码、生存时间、路径问题。
 */
public static void addCookie(String name,
String value,int age,HttpServletResponse 
response) throws 
UnsupportedEncodingException{
Cookie c = new Cookie(name,
URLEncoder.encode(value,"utf-8"));
c.setMaxAge(age);
c.setPath(path);
response.addCookie(c);
}
//从cookie中取出数据
/**
 * 依据cookie的名称返回cookie的值,如果
 * 找不到对应的cookie,返回null。
 * @throws UnsupportedEncodingException 
 */
public static String findCookie(String name,
HttpServletRequest request) throws UnsupportedEncodingException{
String value = null;
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(int i=0;i<cookies.length;i++){
Cookie c = cookies[i];
if(c.getName().equals(name)){
value = URLDecoder.decode(
c.getValue(),"utf-8");
}
}
}
return value;
}

#11


这个写的很详细顺便挣点积分

#12


http://alone-knight.iteye.com/blog/1611112。。刚才那个貌似连接错了

#13


引用 6 楼 a1257427517 的回复:
关闭浏览器后,默认会在服务器中保存30分钟,没被使用则自动销毁。如果要手动销毁需要在web.xml中设置session的生存周期或者在servlet中调用session.invalidate()方法销毁。

是开着浏览器的时候 服务器默认保存30分钟 默认关闭浏览器 session 就销毁

#14


引用 13 楼 u010593193 的回复:
Quote: 引用 6 楼 a1257427517 的回复:

关闭浏览器后,默认会在服务器中保存30分钟,没被使用则自动销毁。如果要手动销毁需要在web.xml中设置session的生存周期或者在servlet中调用session.invalidate()方法销毁。

是开着浏览器的时候 服务器默认保存30分钟 默认关闭浏览器 session 就销毁

是session30分钟没人使用才会自动销毁,和关不关浏览器没有关系,你想关了浏览器在开浏览器还用开始那个session,就必须设置cookie的有效时间最短为30分钟。30分钟前访问就会带seeeion的id号过来,这样就能使用开始那个session了。