public class StandardSession extends java.lang.Object implements HttpSession, Session, java.io.Serializable
IMPLEMENTATION NOTE: An instance of this class represents both the
internal (Session) and application level (HttpSession) view of the session.
However, because the class itself is not declared public, Java logic outside
of the org.apache.catalina.session
package cannot cast an
HttpSession view of this instance back to a Session view.
IMPLEMENTATION NOTE: If you add fields to this class, you must make sure that you carry them over in the read/writeObject methods so that this class is properly serialized.
Modifier and Type | Field and Description |
---|---|
protected java.util.concurrent.atomic.AtomicInteger |
accessCount
The access count for this session.
|
protected static boolean |
ACTIVITY_CHECK |
protected java.util.concurrent.ConcurrentMap<java.lang.String,java.lang.Object> |
attributes
The collection of user data attributes associated with this Session.
|
protected java.lang.String |
authType
The authentication type used to authenticate our cached Principal,
if any.
|
protected long |
creationTime
The time this session was created, in milliseconds since midnight,
January 1, 1970 GMT.
|
protected static java.lang.String[] |
EMPTY_ARRAY
Type array.
|
protected static java.lang.String[] |
excludedAttributes
Deprecated.
Use
Constants.excludedAttributeNames instead. Will be
removed in Tomcat 9. |
protected boolean |
expiring
We are currently processing a session expiration, so bypass
certain IllegalStateException tests.
|
protected StandardSessionFacade |
facade
The facade associated with this session.
|
protected java.lang.String |
id
The session identifier of this Session.
|
protected boolean |
isNew
Flag indicating whether this session is new or not.
|
protected boolean |
isValid
Flag indicating whether this session is valid or not.
|
protected static boolean |
LAST_ACCESS_AT_START |
protected long |
lastAccessedTime
The last accessed time for this Session.
|
protected java.util.ArrayList<SessionListener> |
listeners
The session event listeners for this Session.
|
protected Manager |
manager
The Manager with which this Session is associated.
|
protected int |
maxInactiveInterval
The maximum time interval, in seconds, between client requests before
the servlet container may invalidate this session.
|
protected java.util.Map<java.lang.String,java.lang.Object> |
notes
Internal notes associated with this session by Catalina components
and event listeners.
|
protected java.security.Principal |
principal
The authenticated Principal associated with this session, if any.
|
protected static HttpSessionContext |
sessionContext
Deprecated.
|
protected static StringManager |
sm
The string manager for this package.
|
protected static boolean |
STRICT_SERVLET_COMPLIANCE |
protected java.beans.PropertyChangeSupport |
support
The property change support for this component.
|
protected long |
thisAccessedTime
The current accessed time for this session.
|
SESSION_ACTIVATED_EVENT, SESSION_CREATED_EVENT, SESSION_DESTROYED_EVENT, SESSION_PASSIVATED_EVENT
Constructor and Description |
---|
StandardSession(Manager manager)
Construct a new Session associated with the specified Manager.
|
Modifier and Type | Method and Description |
---|---|
void |
access()
Update the accessed time information for this session.
|
void |
activate()
Perform internal processing required to activate this
session.
|
void |
addSessionListener(SessionListener listener)
Add a session event listener to this component.
|
protected void |
doReadObject(java.io.ObjectInputStream stream)
Read a serialized version of this session object from the specified
object input stream.
|
protected void |
doWriteObject(java.io.ObjectOutputStream stream)
Write a serialized version of this session object to the specified
object output stream.
|
void |
endAccess()
End the access.
|
protected boolean |
exclude(java.lang.String name)
Deprecated.
Use
exclude(String, Object) . Will be removed in
Tomcat 8.5.x. |
protected boolean |
exclude(java.lang.String name,
java.lang.Object value)
Should the given session attribute be excluded?
|
void |
expire()
Perform the internal processing required to invalidate this session,
without triggering an exception if the session has already expired.
|
void |
expire(boolean notify)
Perform the internal processing required to invalidate this session,
without triggering an exception if the session has already expired.
|
void |
fireSessionEvent(java.lang.String type,
java.lang.Object data)
Notify all session event listeners that a particular event has
occurred for this Session.
|
java.lang.Object |
getAttribute(java.lang.String name)
Return the object bound with the specified name in this session, or
null if no object is bound with that name. |
java.util.Enumeration<java.lang.String> |
getAttributeNames()
Return an
Enumeration of String objects
containing the names of the objects bound to this session. |
java.lang.String |
getAuthType()
Return the authentication type used to authenticate our cached
Principal, if any.
|
long |
getCreationTime()
Return the time when this session was created, in milliseconds since
midnight, January 1, 1970 GMT.
|
long |
getCreationTimeInternal()
Return the time when this session was created, in milliseconds since
midnight, January 1, 1970 GMT, bypassing the session validation checks.
|
java.lang.String |
getId()
Return the session identifier for this session.
|
java.lang.String |
getIdInternal()
Return the session identifier for this session.
|
long |
getIdleTime()
Return the idle time (in milliseconds) from last client access time.
|
long |
getIdleTimeInternal()
Return the idle time from last client access time without invalidation check
|
long |
getLastAccessedTime()
Return the last time the client sent a request associated with this
session, as the number of milliseconds since midnight, January 1, 1970
GMT.
|
long |
getLastAccessedTimeInternal()
Return the last client access time without invalidation check
|
Manager |
getManager()
Return the Manager within which this Session is valid.
|
int |
getMaxInactiveInterval()
Return the maximum time interval, in seconds, between client requests
before the servlet container will invalidate the session.
|
java.lang.Object |
getNote(java.lang.String name)
Return the object bound with the specified name to the internal notes
for this session, or
null if no such binding exists. |
java.util.Iterator<java.lang.String> |
getNoteNames()
Return an Iterator containing the String names of all notes bindings
that exist for this session.
|
java.security.Principal |
getPrincipal()
Return the authenticated Principal that is associated with this Session.
|
ServletContext |
getServletContext()
Return the ServletContext to which this session belongs.
|
HttpSession |
getSession()
Return the
HttpSession for which this object
is the facade. |
HttpSessionContext |
getSessionContext()
Deprecated.
As of Version 2.1, this method is deprecated and has no
replacement. It will be removed in a future version of the
Java Servlet API.
|
long |
getThisAccessedTime()
Return the last time the client sent a request associated with this
session, as the number of milliseconds since midnight, January 1, 1970
GMT.
|
long |
getThisAccessedTimeInternal()
Return the last client access time without invalidation check
|
java.lang.Object |
getValue(java.lang.String name)
Deprecated.
As of Version 2.2, this method is replaced by
getAttribute() |
java.lang.String[] |
getValueNames()
Deprecated.
As of Version 2.2, this method is replaced by
getAttributeNames() |
void |
invalidate()
Invalidates this session and unbinds any objects bound to it.
|
boolean |
isAttributeDistributable(java.lang.String name,
java.lang.Object value)
Does the session implementation support the distributing of the given
attribute?
|
boolean |
isNew()
Return
true if the client does not yet know about the
session, or if the client chooses not to join the session. |
boolean |
isValid()
Return the
isValid flag for this session. |
protected boolean |
isValidInternal()
Return the
isValid flag for this session without any expiration
check. |
protected java.lang.String[] |
keys()
Return the names of all currently defined session attributes
as an array of Strings.
|
void |
passivate()
Perform the internal processing required to passivate
this session.
|
void |
putValue(java.lang.String name,
java.lang.Object value)
Deprecated.
As of Version 2.2, this method is replaced by
setAttribute() |
void |
readObjectData(java.io.ObjectInputStream stream)
Read a serialized version of the contents of this session object from
the specified object input stream, without requiring that the
StandardSession itself have been serialized.
|
void |
recycle()
Release all object references, and initialize instance variables, in
preparation for reuse of this object.
|
void |
removeAttribute(java.lang.String name)
Remove the object bound with the specified name from this session.
|
void |
removeAttribute(java.lang.String name,
boolean notify)
Remove the object bound with the specified name from this session.
|
protected void |
removeAttributeInternal(java.lang.String name,
boolean notify)
Remove the object bound with the specified name from this session.
|
void |
removeNote(java.lang.String name)
Remove any object bound to the specified name in the internal notes
for this session.
|
void |
removeSessionListener(SessionListener listener)
Remove a session event listener from this component.
|
void |
removeValue(java.lang.String name)
Deprecated.
As of Version 2.2, this method is replaced by
removeAttribute() |
void |
setAttribute(java.lang.String name,
java.lang.Object value)
Bind an object to this session, using the specified name.
|
void |
setAttribute(java.lang.String name,
java.lang.Object value,
boolean notify)
Bind an object to this session, using the specified name.
|
void |
setAuthType(java.lang.String authType)
Set the authentication type used to authenticate our cached
Principal, if any.
|
void |
setCreationTime(long time)
Set the creation time for this session.
|
void |
setId(java.lang.String id)
Set the session identifier for this session.
|
void |
setId(java.lang.String id,
boolean notify)
Set the session identifier for this session and optionally notifies any
associated listeners that a new session has been created.
|
void |
setManager(Manager manager)
Set the Manager within which this Session is valid.
|
void |
setMaxInactiveInterval(int interval)
Set the maximum time interval, in seconds, between client requests
before the servlet container will invalidate the session.
|
void |
setNew(boolean isNew)
Set the
isNew flag for this session. |
void |
setNote(java.lang.String name,
java.lang.Object value)
Bind an object to a specified name in the internal notes associated
with this session, replacing any existing binding for this name.
|
void |
setPrincipal(java.security.Principal principal)
Set the authenticated Principal that is associated with this Session.
|
void |
setValid(boolean isValid)
Set the
isValid flag for this session. |
void |
tellChangedSessionId(java.lang.String newId,
java.lang.String oldId,
boolean notifySessionListeners,
boolean notifyContainerListeners)
Inform the listeners about the change session ID.
|
void |
tellNew()
Inform the listeners about the new session.
|
java.lang.String |
toString()
Return a string representation of this object.
|
void |
writeObjectData(java.io.ObjectOutputStream stream)
Write a serialized version of the contents of this session object to
the specified object output stream, without requiring that the
StandardSession itself have been serialized.
|
protected static final boolean STRICT_SERVLET_COMPLIANCE
protected static final boolean ACTIVITY_CHECK
protected static final boolean LAST_ACCESS_AT_START
protected static final java.lang.String[] EMPTY_ARRAY
protected java.util.concurrent.ConcurrentMap<java.lang.String,java.lang.Object> attributes
protected transient java.lang.String authType
protected long creationTime
@Deprecated protected static final java.lang.String[] excludedAttributes
Constants.excludedAttributeNames
instead. Will be
removed in Tomcat 9.protected transient volatile boolean expiring
protected transient StandardSessionFacade facade
protected java.lang.String id
protected volatile long lastAccessedTime
protected transient java.util.ArrayList<SessionListener> listeners
protected transient Manager manager
protected volatile int maxInactiveInterval
protected volatile boolean isNew
protected volatile boolean isValid
protected transient java.util.Map<java.lang.String,java.lang.Object> notes
protected transient java.security.Principal principal
protected static final StringManager sm
@Deprecated protected static volatile HttpSessionContext sessionContext
protected final transient java.beans.PropertyChangeSupport support
protected volatile long thisAccessedTime
protected transient java.util.concurrent.atomic.AtomicInteger accessCount
public StandardSession(Manager manager)
manager
- The manager with which this Session is associatedpublic java.lang.String getAuthType()
getAuthType
in interface Session
public void setAuthType(java.lang.String authType)
setAuthType
in interface Session
authType
- The new cached authentication typepublic void setCreationTime(long time)
setCreationTime
in interface Session
time
- The new creation timepublic java.lang.String getId()
getId
in interface HttpSession
getId
in interface Session
public java.lang.String getIdInternal()
getIdInternal
in interface Session
public void setId(java.lang.String id)
public void setId(java.lang.String id, boolean notify)
public void tellNew()
public void tellChangedSessionId(java.lang.String newId, java.lang.String oldId, boolean notifySessionListeners, boolean notifyContainerListeners)
tellChangedSessionId
in interface Session
newId
- new session IDoldId
- old session IDnotifySessionListeners
- Should any associated sessionListeners be
notified that session ID has been changed?notifyContainerListeners
- Should any associated ContainerListeners
be notified that session ID has been changed?public long getThisAccessedTime()
getThisAccessedTime
in interface Session
public long getThisAccessedTimeInternal()
getThisAccessedTimeInternal
in interface Session
getThisAccessedTime()
public long getLastAccessedTime()
getLastAccessedTime
in interface HttpSession
getLastAccessedTime
in interface Session
long
representing the last time the client sent a
request associated with this session, expressed in milliseconds
since 1/1/1970 GMTpublic long getLastAccessedTimeInternal()
getLastAccessedTimeInternal
in interface Session
getLastAccessedTime()
public long getIdleTime()
getIdleTime
in interface Session
public long getIdleTimeInternal()
getIdleTimeInternal
in interface Session
getIdleTime()
public Manager getManager()
getManager
in interface Session
public void setManager(Manager manager)
setManager
in interface Session
manager
- The new Managerpublic int getMaxInactiveInterval()
getMaxInactiveInterval
in interface HttpSession
getMaxInactiveInterval
in interface Session
HttpSession.setMaxInactiveInterval(int)
public void setMaxInactiveInterval(int interval)
setMaxInactiveInterval
in interface HttpSession
setMaxInactiveInterval
in interface Session
interval
- The new maximum intervalpublic void setNew(boolean isNew)
isNew
flag for this session.public java.security.Principal getPrincipal()
Authenticator
with a means to cache a
previously authenticated Principal, and avoid potentially expensive
Realm.authenticate()
calls on every request. If there
is no current associated Principal, return null
.getPrincipal
in interface Session
public void setPrincipal(java.security.Principal principal)
Authenticator
with a means to cache a
previously authenticated Principal, and avoid potentially expensive
Realm.authenticate()
calls on every request.setPrincipal
in interface Session
principal
- The new Principal, or null
if nonepublic HttpSession getSession()
HttpSession
for which this object
is the facade.getSession
in interface Session
public boolean isValid()
isValid
flag for this session.public void setValid(boolean isValid)
isValid
flag for this session.public void access()
public void addSessionListener(SessionListener listener)
addSessionListener
in interface Session
public void expire()
public void expire(boolean notify)
notify
- Should we notify listeners about the demise of
this session?public void passivate()
public void activate()
public java.lang.Object getNote(java.lang.String name)
null
if no such binding exists.public java.util.Iterator<java.lang.String> getNoteNames()
getNoteNames
in interface Session
public void recycle()
public void removeNote(java.lang.String name)
removeNote
in interface Session
name
- Name of the note to be removedpublic void removeSessionListener(SessionListener listener)
removeSessionListener
in interface Session
public void setNote(java.lang.String name, java.lang.Object value)
public java.lang.String toString()
toString
in class java.lang.Object
public void readObjectData(java.io.ObjectInputStream stream) throws java.lang.ClassNotFoundException, java.io.IOException
stream
- The object input stream to read fromjava.lang.ClassNotFoundException
- if an unknown class is specifiedjava.io.IOException
- if an input/output error occurspublic void writeObjectData(java.io.ObjectOutputStream stream) throws java.io.IOException
stream
- The object output stream to write tojava.io.IOException
- if an input/output error occurspublic long getCreationTime()
getCreationTime
in interface HttpSession
getCreationTime
in interface Session
long
specifying when this session was created,
expressed in milliseconds since 1/1/1970 GMTjava.lang.IllegalStateException
- if this method is called on an
invalidated sessionpublic long getCreationTimeInternal()
getCreationTimeInternal
in interface Session
public ServletContext getServletContext()
getServletContext
in interface HttpSession
@Deprecated public HttpSessionContext getSessionContext()
getSessionContext
in interface HttpSession
public java.lang.Object getAttribute(java.lang.String name)
null
if no object is bound with that name.getAttribute
in interface HttpSession
name
- Name of the attribute to be returnedjava.lang.IllegalStateException
- if this method is called on an
invalidated sessionpublic java.util.Enumeration<java.lang.String> getAttributeNames()
Enumeration
of String
objects
containing the names of the objects bound to this session.getAttributeNames
in interface HttpSession
Enumeration
of String
objects
specifying the names of all the objects bound to this sessionjava.lang.IllegalStateException
- if this method is called on an
invalidated session@Deprecated public java.lang.Object getValue(java.lang.String name)
getAttribute()
null
if no object is bound with that name.getValue
in interface HttpSession
name
- Name of the value to be returnedjava.lang.IllegalStateException
- if this method is called on an
invalidated session@Deprecated public java.lang.String[] getValueNames()
getAttributeNames()
getValueNames
in interface HttpSession
String
objects specifying the names of
all the objects bound to this sessionjava.lang.IllegalStateException
- if this method is called on an
invalidated sessionpublic void invalidate()
invalidate
in interface HttpSession
java.lang.IllegalStateException
- if this method is called on
an invalidated sessionpublic boolean isNew()
true
if the client does not yet know about the
session, or if the client chooses not to join the session. For
example, if the server used only cookie-based sessions, and the client
has disabled the use of cookies, then a session would be new on each
request.isNew
in interface HttpSession
true
if the server has created a session, but the
client has not yet joinedjava.lang.IllegalStateException
- if this method is called on an
invalidated session@Deprecated public void putValue(java.lang.String name, java.lang.Object value)
setAttribute()
After this method executes, and if the object implements
HttpSessionBindingListener
, the container calls
valueBound()
on the object.
putValue
in interface HttpSession
name
- Name to which the object is bound, cannot be nullvalue
- Object to be bound, cannot be nulljava.lang.IllegalStateException
- if this method is called on an
invalidated sessionpublic void removeAttribute(java.lang.String name)
After this method executes, and if the object implements
HttpSessionBindingListener
, the container calls
valueUnbound()
on the object.
removeAttribute
in interface HttpSession
name
- Name of the object to remove from this session.java.lang.IllegalStateException
- if this method is called on an
invalidated sessionpublic void removeAttribute(java.lang.String name, boolean notify)
After this method executes, and if the object implements
HttpSessionBindingListener
, the container calls
valueUnbound()
on the object.
name
- Name of the object to remove from this session.notify
- Should we notify interested listeners that this
attribute is being removed?java.lang.IllegalStateException
- if this method is called on an
invalidated session@Deprecated public void removeValue(java.lang.String name)
removeAttribute()
After this method executes, and if the object implements
HttpSessionBindingListener
, the container calls
valueUnbound()
on the object.
removeValue
in interface HttpSession
name
- Name of the object to remove from this session.java.lang.IllegalStateException
- if this method is called on an
invalidated sessionpublic void setAttribute(java.lang.String name, java.lang.Object value)
After this method executes, and if the object implements
HttpSessionBindingListener
, the container calls
valueBound()
on the object.
setAttribute
in interface HttpSession
name
- Name to which the object is bound, cannot be nullvalue
- Object to be bound, cannot be nulljava.lang.IllegalArgumentException
- if an attempt is made to add a
non-serializable object in an environment marked distributable.java.lang.IllegalStateException
- if this method is called on an
invalidated sessionpublic void setAttribute(java.lang.String name, java.lang.Object value, boolean notify)
After this method executes, and if the object implements
HttpSessionBindingListener
, the container calls
valueBound()
on the object.
name
- Name to which the object is bound, cannot be nullvalue
- Object to be bound, cannot be nullnotify
- whether to notify session listenersjava.lang.IllegalArgumentException
- if an attempt is made to add a
non-serializable object in an environment marked distributable.java.lang.IllegalStateException
- if this method is called on an
invalidated sessionprotected boolean isValidInternal()
isValid
flag for this session without any expiration
check.public boolean isAttributeDistributable(java.lang.String name, java.lang.Object value)
IllegalArgumentException
thrown if the proposed attribute is
not distributable.
Note that the Manager
implementation may further restrict which
attributes are distributed but a Manager
level restriction should
not trigger an IllegalArgumentException
in
HttpSession.setAttribute(String, Object)
This implementation simply checks the value for serializability. Sub-classes might use other distribution technology not based on serialization and can override this check.
isAttributeDistributable
in interface Session
name
- The attribute namevalue
- The attribute valuetrue
if distribution is supported, otherwise false
protected void doReadObject(java.io.ObjectInputStream stream) throws java.lang.ClassNotFoundException, java.io.IOException
IMPLEMENTATION NOTE: The reference to the owning Manager is not restored by this method, and must be set explicitly.
stream
- The input stream to read fromjava.lang.ClassNotFoundException
- if an unknown class is specifiedjava.io.IOException
- if an input/output error occursprotected void doWriteObject(java.io.ObjectOutputStream stream) throws java.io.IOException
IMPLEMENTATION NOTE: The owning Manager will not be stored
in the serialized representation of this Session. After calling
readObject()
, you must set the associated Manager
explicitly.
IMPLEMENTATION NOTE: Any attribute that is not Serializable
will be unbound from the session, with appropriate actions if it
implements HttpSessionBindingListener. If you do not want any such
attributes, be sure the distributable
property of the
associated Manager is set to true
.
stream
- The output stream to write tojava.io.IOException
- if an input/output error occurs@Deprecated protected boolean exclude(java.lang.String name)
exclude(String, Object)
. Will be removed in
Tomcat 8.5.x.name
- the attribute's nameprotected boolean exclude(java.lang.String name, java.lang.Object value)
isAttributeDistributable(String, Object)
which is kept
separate to support the checks required in
setAttribute(String, Object, boolean)
name
- The attribute namevalue
- The attribute valuetrue
if the attribute should be excluded from
distribution, otherwise false
public void fireSessionEvent(java.lang.String type, java.lang.Object data)
type
- Event typedata
- Event dataprotected java.lang.String[] keys()
protected void removeAttributeInternal(java.lang.String name, boolean notify)
After this method executes, and if the object implements
HttpSessionBindingListener
, the container calls
valueUnbound()
on the object.
name
- Name of the object to remove from this session.notify
- Should we notify interested listeners that this
attribute is being removed?Copyright © 2000-2018 Apache Software Foundation. All Rights Reserved.