Cookies are a bad thing when they are being misused, but they still have their place...
In general, TW5 stores everything in tiddler fields, so that all stateful-ness can be saved with the document. This provides much greater consistency and reliability of handling as compared to cookies. However, in order for changed values to persist, it requires the ability to save the document, which most *visitors* to the published document won't have.
In addition, tiddler-based storage is not useful for tracking visitor-specific information, such as "when did this visitor last view this document" or "what was the last tiddler viewed by this visitor", etc. This kind of information is different for each person who visits the page, and should *not* be saved with the document. Similarly, various option settings (e.g., story view (classic, zoomin, etc.), show/hide Sidebar) should be saved separately for each visitor, so that their desired display preferences could be automatically re-applied each time they visit the document.
To address this need for visitor-specific persistent information , I've implemented a "cookie binding" widget:
The widget syntax is:
<$cookie name="..." tiddler="..." field="..." index="..."/>
where:
name = the name of the cookie to store
tiddler = the title of the tiddler containing the field/index value to track
field = a fieldname within the tiddler
or
index = an attribute name within a DataTiddler
To create a cookie binding, add the <$cookie> widget to a tiddler tagged with $:/tags/PageTemplate. When first rendered, the <$cookie> widgets will retrieve the saved cookie values (if any) and apply them to the corresponding tiddler fields/attributes. From then on, any changes to the tiddler fields/attributes during the session are automatically pushed back to the cookie values, so they stay in sync with the current tiddler values. When the document is closed *without saving*, the changed tiddler values are discarded, but the cookie values remain, so that they can be re-applied the next time the document is loaded.
To see this in action, just click on the "gear" icon in the upper right of the InsideTiddlyWiki document, and change some display settings (e.g., pick a different page background). Then, reload the page, and see that your choices are automatically re-applied. You can also use your browser's cookie management functions to directly view/edit/delete the cookies that were saved, and if you delete those cookies, and re-load the page you will see that the display settings revert back to the defaults that are saved in the document.
Note: there are also a few other widgets and macros for cookie handling:
* TWBook/Cookies/action-setcookie.js
<$action-setcookie name="..." value="..."/>
used with <$button> to explicitly set/clear a cookie value
note: a blank value (i.e., value="") removes the cookie
TWBook/Cookies/getcookie.js
<<getCookie name:"cookiename">>
returns the value of the specified cookie
use for direct display, or in filters, or in <$set>
TWBook/Cookies/cookienames.js
<<cookienames>>
primarily used with filters, returns the list of all cookie names for the current document
TWBook/Cookies/CookieJar
declares <$cookie> bindings for settings ("OPT_*"), favorites ("FAV_*"), and Table of Contents "toggles" ("TOC_")
note: this tiddler is tagged "$:/tags/PageTemplate so that the cookie widgets can use the TW core refresh cycle to continously "listen" for tiddler changes
enjoy,
-e
Eric Shulman
ELS Design Studios
TiddlyTools - "Small Tools for Big Ideas!"
InsideTiddlyWiki: The Missing Manuals
YOUR DONATIONS ARE VERY IMPORTANT!
HELP ME TO HELP YOU - MAKE A CONTRIBUTION TO MY "TIP JAR"...
Professional TiddlyWiki Consulting Services...
Analysis, Design, and Custom Solutions: