human
Complete this python program:
def init(storage_type=None, path=None, path_header=None, name='session_id', timeout=60, domain=None, secure=False, clean_freq=5, persistent=True, httponly=False, debug=False, **kwargs):
assistant
#Here is the Python program you requested.

    """Initialize session object (using cookies).
    storage_class
    The Session subclass to use. Defaults to RamSession.
    storage_type
    (deprecated)
    One of \ram\, \file\, memcached\. This will be
    used to look up the corresponding class in cherrypy.lib.sessions
    globals. For example, \file\ will use the FileSession class.
    path
    The \path\ value to stick in the response cookie metadata.
    path_header
    If \path\ is None (the default), then the response
    cookie \path\ will be pulled from request.headers[path_header].
    name
    The name of the cookie.
    timeout
    The expiration timeout (in minutes) for the stored session data.
    If \persistent\ is True (the default), this is also the timeout
    for the cookie.
    domain
    The cookie domain.
    secure
    If False (the default) the cookie \secure\ value will not
    be set. If True, the cookie \secure\ value will be set (to 1).
    clean_freq (minutes)
    The poll rate for expired session cleanup.
    persistent
    If True (the default), the \timeout\ argument will be used
    to expire the cookie. If False, the cookie will not have an expiry,
    and the cookie will be a "session cookie" which expires when the
    browser is closed.
    httponly
    If False (the default) the cookie \httponly\ value will not be set.
    If True, the cookie \httponly\ value will be set (to 1).
    Any additional kwargs will be bound to the new Session instance,
    and may be specific to the storage type. See the subclass of Session
    you\re using for more information.
    """
    storage_class = kwargs.pop('storage_class', RamSession)
    request = cherrypy.serving.request
    if hasattr(request, '_session_init_flag'):
        return
    request._session_init_flag = True
    id = None
    if (name in request.cookie):
        id = request.cookie[name].value
        if debug:
            cherrypy.log(('ID    obtained    from    request.cookie:    %r' % id), 'TOOLS.SESSIONS')
    first_time = (not hasattr(cherrypy, 'session'))
    if storage_type:
        if first_time:
            msg = 'storage_type    is    deprecated.    Supply    storage_class    instead'
            cherrypy.log(msg)
        storage_class = (storage_type.title() + 'Session')
        storage_class = globals()[storage_class]
    if first_time:
        if hasattr(storage_class, 'setup'):
            storage_class.setup(**kwargs)
    kwargs['timeout'] = timeout
    kwargs['clean_freq'] = clean_freq
    cherrypy.serving.session = sess = storage_class(id, **kwargs)
    sess.debug = debug
    def update_cookie(id):
        'Update    the    cookie    every    time    the    session    id    changes.'
        cherrypy.serving.response.cookie[name] = id
    sess.id_observers.append(update_cookie)
    if (not hasattr(cherrypy, 'session')):
        cherrypy.session = cherrypy._ThreadLocalProxy('session')
    if persistent:
        cookie_timeout = timeout
    else:
        cookie_timeout = None
    set_response_cookie(path=path, path_header=path_header, name=name, timeout=cookie_timeout, domain=domain, secure=secure, httponly=httponly)