zoukankan      html  css  js  c++  java
  • HttpSession API

    1. 接口介绍

    官方地址:http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpSession.html

    提供一种方法,用于跨多个页面请求或访问网站来识别用户,并存储有关该用户的信息。

    servlet容器使用此接口在HTTP客户端和HTTP服务器之间创建会话。会话将在指定的时间段内持续,跨越多个连接或用户的页面请求。一个会话通常对应于一个用户,该用户可以多次访问一个站点。服务器可以通过多种方式维护会话,例如使用cookie或重写URL。

    此接口允许servlet查看和操作有关会话的信息,例如会话标识符、创建时间和上次访问时间将对象绑定到会话,允许用户信息跨多个用户连接持久化

    当应用程序在会话中存储对象或从会话中删除对象时,会话将检查该对象是否实现HttpSessionBindingListener。如果是,servlet将通知对象它已绑定到会话或已从会话中解除绑定。通知在绑定方法完成后发送。对于无效或过期的会话,将在会话无效或过期后发送通知。

    当容器在分布式容器设置中的VM之间迁移会话时,将通知实现HttpSessionActivationListener接口的所有会话属性。

    servlet应该能够处理客户端不选择加入会话的情况,例如故意关闭cookie的情况。在客户端加入会话之前,isNew将返回true。如果客户端选择不加入会话,getSession将在每个请求上返回不同的会话,isNew将始终返回true。

    会话信息的范围仅限于当前web应用程序(ServletContext),因此存储在一个上下文中的信息在另一个上下文中不会直接可见。

    2. 方法摘要:

    返回值 方法名 (参数)
    java.lang.Object getAttribute(java.lang.String name) 返回在此会话中使用指定名称绑定的对象,如果名称下没有对象绑定,则返回null。
    java.util.Enumeration getAttributeNames() 返回字符串对象的枚举,其中包含绑定到此会话的所有对象的名称。
    long getCreationTime() 返回创建此会话的时间,从1970年1月1日格林威治标准时间午夜起以毫秒为单位。
    java.lang.String getId() 返回包含分配给此会话的唯一标识符的字符串。
    long getLastAccessedTime() 返回客户端上次发送与此会话关联的请求的时间,以自1970年1月1日格林威治标准时间午夜以来的毫秒数表示,并以容器接收请求的时间标记。
    int getMaxInactiveInterval() 返回servlet容器在客户端访问之间保持此会话打开的最大时间间隔(秒)。
    ServletContext getServletContext() 返回此会话所属的ServletContext。
    HttpSessionContext getSessionContext() 已弃用。从版本2.1开始,此方法已弃用,并且没有替换。它将在未来版本的JavaServletAPI中删除。
    java.lang.Object getValue(java.lang.String name) 已弃用。从版本2.2开始,此方法被替换为getAttribute(java.lang.String)。
    java.lang.String[] getValueNames() 已弃用。从版本2.2开始,此方法被替换为getAttributeNames()
    void invalidate() 使该会话无效,然后解除绑定到该会话的所有对象。(意味着删除所有回话)
    boolean isNew() 如果客户端尚不知道该会话,或者如果客户端选择不加入该会话,则返回true。
    void putValue(java.lang.String name, java.lang.Object value) 已弃用。从版本2.2开始,此方法将被setAttribute(java.lang.String、java.lang.Object)替换
    void removeAttribute(java.lang.String name) 从此会话中删除与指定名称绑定的对象。
    void removeValue(java.lang.String name) 已弃用。从2.2版开始,此方法替换为removeAttribute(java.lang.String)
    void setAttribute(java.lang.String name, java.lang.Object value) 使用指定的名称将对象绑定到此会话。
    void setMaxInactiveInterval(int interval) 指定servlet容器使此会话无效之前客户端请求之间的时间(秒),设置失效时间。

    3.代码示例

    点击查看代码
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    import java.util.Enumeration;
    import java.util.Objects;
    import java.util.UUID;
    
    public class SessionUtil {
        /**
         * session key
         */
        private final String USER_SESSION_KEY = "user_session_key";
    
        private HttpSession initSession() {
            HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
            return request.getSession();
        }
    
        /**
         * 当前是否登录
         *
         * @return
         */
        public boolean isLogin() {
            return null != getUser();
        }
    
        /**
         * 获取session中的用户信息
         *
         * @return User
         */
        public Object getUser() {
            return initSession().getAttribute(USER_SESSION_KEY);
        }
    
        /**
         * 添加session
         *
         * @param user
         */
        public void setUser(Object user) {
            initSession().setAttribute(USER_SESSION_KEY, user);
        }
    
        /**
         * 删除session信息
         */
        public void removeUser() {
            initSession().removeAttribute(USER_SESSION_KEY);
        }
    
        /**
         * 获取session中的Token信息
         *
         * @return String
         */
        public String getToken(String key) {
            return (String) initSession().getAttribute(key);
        }
    
        /**
         * 添加Token
         */
        public void setToken(String key) {
            initSession().setAttribute(key, UUID.randomUUID().toString());
        }
    
        /**
         * 删除Token信息
         */
        public void removeToken(String key) {
            initSession().removeAttribute(key);
        }
    
        /**
         * 删除所有的session信息
         */
        public void removeAllSession() {
            Enumeration<String> attrs = initSession().getAttributeNames();
            while(attrs.hasMoreElements()){
                // 获取session键值
                String name = attrs.nextElement().toString();
                // 根据键值取session中的值  
                Object vakue = initSession().getAttribute(name);
                // 打印结果 
                System.out.println("------" + name + ":" + vakue +"--------\n");
    
            }
        }
    }
    
  • 相关阅读:
    VS提示“项目文件" "已被重命名或已不在解决方案中”的解决办法 .
    微信公众平台教程和SDK收集
    “SQLServerAgent当前未运行”问题解决
    $(document).click() 在苹果手机上不能正常运行
    友盟iOS推送配置(从真机调试到推送)
    Ubuntu安装VMware Tools的方法
    TortoiseSVN客户端如何更改新的URL
    Windows Server 2008系统如何取消登录时要按Ctrl+Alt+Delete组合键
    Windows Server 2008 显示桌面图标
    用WinRAR进行安装包的制作
  • 原文地址:https://www.cnblogs.com/ringbug/p/15587246.html
Copyright © 2011-2022 走看看