# 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
