<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!DOCTYPE document [
  <!ENTITY project SYSTEM "project.xml">
]>
<document url="sessionidgenerator.html">

  &project;

  <properties>
    <title>The SessionIdGenerator Component</title>
  </properties>

<body>

<section name="Table of Contents">
<toc/>
</section>

<section name="Introduction">

  <p>The <strong>SessionIdGenerator</strong> element represents the <em>session
  id generator</em> that will be used to create create session ids used by
  web application HTTP sessions.</p>

  <p>A SessionIdGenerator element MAY be nested inside a
  <a href="manager.html">Manager</a> component.  If it is not included,
  a default SessionIdGenerator configuration will be created automatically, which
  is sufficient for most requirements, &#x2014; see
  <em>Standard SessionIdGenerator Implementation</em> below for the details
  of this configuration.</p>

</section>


<section name="Attributes">

  <subsection name="Common Attributes">

    <p>All implementations of <strong>SessionIdGenerator</strong>
    support the following attributes:</p>

    <attributes>

      <attribute name="className" required="false">
        <p>Java class name of the implementation to use.  This class must
        implement the <code>org.apache.catalina.SessionIdGenerator</code> interface.
        If not specified, the standard value (defined below) will be used.</p>
      </attribute>

      <attribute name="jvmRoute" required="false">
        <p>A routing identifier for this Tomcat instance. It will be added
        to the session id to allow for stateless stickyness routing by
        load balancers. The details on how the <code>jvmRoute</code>
        will be included in the id are implementation dependent.
        See <a href="#Standard_Implementation">Standard Implementation</a>
        for the default behavior.</p>

        <p><strong>NOTE</strong> - The value for this property is inherited
        automatically from the <code>jvmRoute</code> attribute of the
        <a href="engine.html">Engine</a> element.</p>
      </attribute>

      <attribute name="sessionIdLength" required="false">
        <p>The length of session ids created by this SessionIdGenerator.
        The details on how the <code>sessionIdLength</code>
        influences the session id length are implementation dependent.
        See <a href="#Standard_Implementation">Standard Implementation</a>
        for the default behavior.</p>
      </attribute>

    </attributes>

  </subsection>


  <subsection name="Standard Implementation">

    <p>Tomcat provides a standard implementations of <strong>SessionIdGenerator</strong>
    for use.</p>

    <h3>Standard SessionIdGenerator Implementation</h3>

    <p>The standard implementation of <strong>SessionIdGenerator</strong> is
    <strong>org.apache.catalina.util.StandardSessionIdGenerator</strong>.
    It supports the following attributes:</p>

    <attributes>

      <attribute name="jvmRoute" required="false">
        <p>A routing identifier for this Tomcat instance. It will be added
        to the end of the session id separated by a &quot;.&quot;.</p>
      </attribute>

      <attribute name="sessionIdLength" required="false">
        <p>The length of session ids created by this SessionIdGenerator.
        More precisely the session id length is twice the value of
        <code>sessionIdLength</code> plus the length of the trailing
        <code>jvmRoute</code> if given. The factor 2 is because
        the session id is constructed using <code>sessionIdLength</code>
        random bytes, each byte being encoded in two hex characters
        in the actual id. The default value is 16.</p>
      </attribute>

    </attributes>

  </subsection>


</section>


</body>


</document>
