浅谈Session技术

Posted awong18

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈Session技术相关的知识,希望对你有一定的参考价值。

浅谈Session技术

我们通常会将Cookie和Session作为一个组来一起学习。他们之间存在着很大的共同点;

在百度百科中,这样对Cookie和Session定义:

Cookie:类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。(关键字:客户端)

Session:称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。(关键字:服务器)

Session和Cookie的区别:

  • Cookie是把用户的数据写给客户端浏览器,由客户端浏览器进行保存,并且可以有多个Cookie,成为Cookies;

  • Session是把用户的数据写到用户独占的Session中,由服务器端进行保存,并且为了不对服务器资源进行浪费,Session只保存一些比较重要的数据;

  • Session对象是由服务创建的。

Session的使用场景

  • 保存一个登录用户的信息;

  • 保存购物网站的购物车信息;

  • 在使用某网站时经常需要使用到的数据,也将其保存在Session中。

代码示例

获取Session信息:

package psl.wong.servlet;
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.io.IOException;
import java.io.PrintWriter;
public class SessionDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决浏览器乱码问题
        req.setCharacterEncoding("GBK");
        resp.setCharacterEncoding("GBK");
        PrintWriter writer = resp.getWriter();
        //创建一个Session
        HttpSession session = req.getSession();
        //给Session中存东西
        session.setAttribute("name","Hayden-wong");
        //获取Session的ID
        String sessionId = session.getId();
        //判断是否是一个新的Session
        if (session.isNew()){
            writer.write("这是一个新的Session,刚刚创建成功了,ID:"+sessionId);
        }else{
            writer.write("服务器已经存在此Session,ID:"+sessionId);
        }
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

设置session的手动过期:

package psl.wong.servlet;
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.io.IOException;
//移除Session
public class SessionDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        session.removeAttribute("name");
        session.invalidate();
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

设置session的自动过期(由web.xml实现):

<!--设置session自动注销-->
<session-config>
    <!--X分钟后session自动失效,以分钟为单位的。-->
    <session-timeout>1</session-timeout>
</session-config>

以上是关于浅谈Session技术的主要内容,如果未能解决你的问题,请参考以下文章

浅谈hibernate的sessionFactory和session

浅谈Session的使用(原创)

浅谈cookie技术

浅谈Cookie、HttpOnly那点事儿

浅谈关于session

浅谈JS中的!=== !=====的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的(代码