cookie.ws3

# cookie example - store context in a cookie
#
# this example demonstrates how to use cookies with websh3
#

# create session context manager with the name "state"
web::cookiecontext state

# produce the page of this sample application
proc page {} {

    # get current access counter from state ...
    set cnt [state::cget cnt 0]

    # ... and increment right away
    #
    #     Note: cookie must be sent before the first "web::put" is used
    #           This is because a cookie must be sent as a HTTP header
    set  newcnt $cnt
    incr newcnt
    state::cset cnt $newcnt

    # commit the changes on the state
    state::commit

    # now the html output
    web::put "<html><head><title>Cookie Example</title></head>"
    web::put "<body bgcolor=\"#FFFFFF\">"

    # change welcome text depending on state
    if { $cnt == 0 } {
	# the first time a warm welcome
	web::put "<h1>Welcome</h1>"
	web::put "to the wonderful world of Websh"
    } else {
	# then just a hello
	web::put "<h1>Hello</h1>"
	web::put "looks like this is your visit Nr $cnt"
    }
    web::put "<p>"

    # and give the user the change to:
    # - invalidate the cookie
    web::put "<a href=\"[web::cmdurl clearCookie]\">reset</a>"
    web::put " | "
    # - to move on to the next page of the application
    #   in this example, just go back to the same page
    web::put "<a href=\"[web::cmdurl default]\">next visit</a>"

    # properly close html code
    web::put "</body></html>"
}


web::command clearCookie {

    # get current cookie, if any
    state::init mycookie

    # ... and invalidate immediately
    state::invalidate

    # show page
    page
}

web::command default {

    # get current cookie, if any
    state::init mycookie

    # show page
    page
}

# dispatch
web::dispatch

# cleanup context after request (to prevent session crosstalk)
state::delete

Generated by GNU enscript 1.6.3.