java设置与获取session

一、Session会话

     session对象用于在会话范围内,记录每个客户端的访问状态,以便于跟踪每个客户端的操作状态,在会话存储的信息,在浏览器发出后续请求时可以获取这些会话的有效数据。  

     从客户打开浏览器连接到服务器,到客户关闭浏览器离开这个服务器,称做一个会话。当客户访问服务器是,可能会反复连接这个服务器上的几个页面、反复刷新一个页面或不断地向一个页面提交信息等,服务器应当通过某种方法知道这是同一个客户,这时就需要session对象。

     在jsp页面中可以直接使用session对象(jsp的内置对象),也可以通过pageContext.getSession()或者request.getSession重新回去session对象。 

session的工作原理如下:

    客户首次访问服务器的一个页面时,服务器就会为该用户分配一个session对象,同时为这个session指定唯一的ID,并且将该ID发送到客户端并写入到cookie中,使得客户端与服务器的session建立一一对应的关系;  

    当客户端继续访问服务器端的其它资源时,服务器不再为该客户分配新的session对象,直到客户端浏览器关闭、超时或调用session的invalidate()方法使其失效,客户端与服务器的会话结束。

    当客户重新打开浏览器访问网站时,服务器会重新为客户分配一个session对象,并重新分配sessionID。  

二、Session的操作

1、public void setAttribute(String name,String value)设定指定名字的属性的值,并将它添加到session会话范围内,如果这个属性是会话范围内存在,则更改该属性的值。  

2、public Object getAttribute(String name)在会话范围内获取指定名字的属性的值,返回值类型为object,如果该属性不存在,则返回null。  

3、public void removeAttribute(String name),删除指定名字的session属性,若该属性不存在,则出现异常。  

4、public void invalidate(),使session失效。可以立即使当前会话失效,原来会话中存储的所有对象都不能再被访问。  

5、public String getId( ),获取当前的会话ID。每个会话在服务器端都存在一个唯一的标示sessionID,session对象发送到浏览器的唯一数据就是sessionID,它一般存储在cookie中。  

6、public void setMaxInactiveInterval(int interval) 设置会话的最大持续时间,单位是秒,负数表明会话永不失效。  

7、public int getMaxInActiveInterval(),获取会话的最大持续时间。  

8、使用session对象的getCreationTime()和getLastAccessedTime()方法可以获取会话创建的时间和最后访问的时间,但其返回值是毫秒,一般需要使用下面的转换来获取具体日期和时间。  

    Date creationTime = new Date(session.getCreationTime());  
    Date accessedTime = new Date(session.getLastAccessedTime());  

三、java中设置与获取session

代理线程中的HttpServletRequest变量,使代码中可以通过静态方法访问request

import java.io.BufferedReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.Principal;
import java.util.Enumeration;
import java.util.Locale;
import java.util.Map;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletInputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;


public class Request {

	/**
	 * 获取Request实例
	 *
	 * @return Request实例对象
	 */
	public static HttpServletRequest getInst() {
		return (HttpServletRequest) AppMgr.threadVar("request");
	}

	/**
	 * TODO$
	 *
	 * @param request
	 *            void
	 */
	public static void setInst(HttpServletRequest request) {
		AppMgr.setThreadVar("request", request);
	}

	/**
	 * 获取当前用户
	 *
	 * @return 用户信息
	 */
	public static User curUser() {
		try {
			return (User) getSession(true).getAttribute(User.KEY_SESSION_USER);
		} catch (Exception e) {
			// 没有用户用guest处理
			IBean guest = new Bean();
			guest.set("USER_CODE", "guest");
			guest.set("USER_NAME", "guest");
			return new User(guest);
		}
	}
	/**
	 * 返回一个Cookie数组,该数组包含这个请求中当前的所有Cookie。 如果这个请求中没有Cookie,返回一个空数组。
	 *
	 * @return Cookie数组
	 */
	public static Cookie[] getCookies() {
		return getInst().getCookies();
	}
	/**
	 * 返回当前请求的Session
	 *
	 * @param create
	 *            没有有效的Session时,是否创建新Session,不创建返回null
	 * @return Session
	 */
	public static HttpSession getSession(boolean create) {
		return getInst().getSession(create);
	}

	/**
	 * 返回当前请求的Session
	 *
	 * @return Session
	 */
	public static HttpSession getSession() {
		return getInst().getSession();
	}

	/**
	 * 返回当前请求的Session Id
	 *
	 * @return Session Id
	 */
	public static String getRequestedSessionId() {
		return getInst().getRequestedSessionId();
	}

	/**
	 * 检查当前请求的Session是否可用。
	 *
	 * @return boolean值,是否可用
	 */
	public static boolean isRequestedSessionIdValid() {
		return getInst().isRequestedSessionIdValid();
	}

	/**
	 * 判断请求的Session Id是否是通过客户端的一个cookie提供的。
	 *
	 * @return boolean值,是否是cookie提供
	 */
	public static boolean isRequestedSessionIdFromCookie() {
		return getInst().isRequestedSessionIdFromCookie();
	}

	/**
	 * 如果这个请求的Session Id是通过客户端的URL的一部分提供的,该方法返回真,否则返回假。
	 *
	 * @return boolean值,Session Id是否来自URL
	 */
	public static boolean isRequestedSessionIdFromURL() {
		return getInst().isRequestedSessionIdFromURL();
	}
}

java中设置与获取session

import com.platform.core.web.Request;
public class AppMgr {
    private static final String module = AppMgr.class.getName();
    private ArrayList innerStartItems;

    /**
     * 构造器
     */
    private AppMgr() {
        innerStartItems = new ArrayList();
        innerStartItems.add(new Log4j());
        innerStartItems.add(new PlatformConfig());
        innerStartItems.add(new PlatformCacheMgr());
        innerStartItems.add(DataSourceMgr.getInstance());
        innerStartItems.add(new PlatformListenerItem());
        innerStartItems.add(JobMgr.getInstance());
    }

    /**
     * 实例
     */
    private static AppMgr appMgr = new AppMgr();

    /**
     * 获取实例
     * @return 实例
     */
    public static AppMgr getInstance() {
        return appMgr;
    }

     
        /**
     * 获取session变量
     * @param key key
     * @return rtnObj rtnObj
     */
    public static Object sessionVar(String key) {
        return Request.getSession(true).getAttribute(key);
    }

    /**
     * 获取session变量
     * @param key key
     * @param obj objInst
     */
    public static void setSessionVar(String key, Object obj) {
        Request.getSession(true).setAttribute(key, obj);
    }

    /**
     * 获取
     * @param key key
     * @param funcCode String
     * @return rtnObj rtnObj
     */
    public static Object sessionFVar(String funcCode, String key) {
        Map map = (Map) Request.getSession(true).getAttribute(funcCode);
        if (map == null) {
            map = new HashMap();
        }
        return map.get(key);
    }

    /**
     * @param funcCode
     * @param key
     * @param obj
     */
    public static void setSessionFVar(String funcCode, String key, Object obj) {
        Map map = (Map) Request.getSession(true).getAttribute(funcCode);
        if (map == null) {
            map = new HashMap();
            Request.getSession(true).setAttribute(funcCode, map);
        }
        map.put(key, obj);
    }


    /**
     * 线程级变量
     */
    private static final ThreadLocal TL = new ThreadLocal();

    /**
     * 获取线程级实例对象
     * @return rtnBean rtnBean
     */
    private static Bean threadBean() {
        Bean bean = (Bean) TL.get();
        if (bean == null) {
            bean = new Bean();
            TL.set(bean);
        }
        return bean;
    }

    /**
     * 获取线程级实例对象中某参数值
     * @param key key
     * @return rtnObj rtnObj
     */
    public static Object threadVar(String key) {
        return threadBean().get(key);
    }

    /**
     * 设置线程级实例对象中某参数值
     * @param key key
     * @param obj setter objInst
     */
    public static void setThreadVar(String key, Object obj) {
        threadBean().set(key, obj);
    }
}

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(经典后端)