Session

1、Sessio(会话):就是从打开浏览器到关闭浏览器即为一次会话,只要浏览器不关闭Session就不会消失,Sessio可以用来保存用户的信息。比如:你用Chrome浏览器打开了B站,并且进行了登录,如果你关闭了B站的窗口然后过一会再次打开B站主页面的时候,你会发现你的用户仍然处于登录状态。

2、服务器会给每一个用户(浏览器)创建一个Session,打开两个浏览器(Chrome、Edge)就是两个用户。

3、Sessio简单代码:

session.setAttribute("name","小明") 用来存String类型,session.setAttribute(String ,Object)还可以存对象(下面写)。setAttribute(String ,Object)方法除了session可以调用,ServletContext context对象也可以用,context.setAttribute(String ,Object)。session.getAttribute()返回的是Object。

public class Session01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //    解决乱码
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
    //    获取Session对象
        HttpSession session = req.getSession();

    //    用Session对象存东西
        session.setAttribute("name","小明");
    //获得session的Id
        String sessionId = session.getId();
    //    判断Session是否创建
        if (session.isNew()){
            resp.getWriter().write("session创建成功"+sessionId);
        }else {
            resp.getWriter().write("session已经在服务器上创建了,ID为:"+sessionId);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}



public class Session02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //    解决乱码
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //    获取Session对象
        HttpSession session = req.getSession();

        //获取Session对象存的东西
       String name = (String) session.getAttribute("name");

        resp.getWriter().print("session获得的东西"+name);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        
    }
}

web.xml


    <servlet>
        <servlet-name>Session01</servlet-name>
        <servlet-class>com.iflytek.servlet.Session01</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Session01</servlet-name>
        <url-pattern>/s1</url-pattern>
    </servlet-mapping>


    <servlet>
        <servlet-name>Session02</servlet-name>
        <servlet-class>com.iflytek.servlet.Session02</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Session02</servlet-name>
        <url-pattern>/s2</url-pattern>
    </servlet-mapping>

session.setAttribute(Object)

public class Person {
    private String name;
    private int age;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 运行结果:

<!--    设置session默认失效时间  以分钟为单位-->
    <session-config>
        <session-timeout>1</session-timeout>
    </session-config>

(web.xml中配置)

 用户一段时间没有登录,服务器就会默认让session小时,不认session一直存在服务器量太大,易崩。

4、Session和Cookie的区别:

Cookie:用户的数据写给用户的浏览器,浏览器保存。

Session:用户的数据写给session,服务器保存。Session对象时服务器创建,获取对象时是request请求 HttpSession session = req.getSession();

使用场景:

保存用户登录信息、保存购物车信息、在整个网站中经常会使用的数据。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值