<div class="gmail_quote">On Thu, Jul 29, 2010 at 10:57 AM, Nicholas Zakas <span dir="ltr"><<a href="mailto:nzakas@yahoo-inc.com" target="_blank">nzakas@yahoo-inc.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">


<div link="blue" vlink="purple" lang="EN-US"><div>










<font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;">    setter creator void setItem(in DOMString
key, in any data, [Optional] in unsigned long ttl);</span></font>

<p class="MsoNormal"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;"> </span></font></p>

<p class="MsoNormal"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;">The third argument is a TTL specifying how long, in
milliseconds, the data should be stored in sessionStorage/localStorage. Some
proposed implementation details:</span></font></p>

<p class="MsoNormal"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;">* A TTL of 0 is considered invalid and ignored, as is any
value less than 0. If you want to immediately remove a key, it should be done
via removeItem().</span></font></p>

<p class="MsoNormal"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;">* The TTL for a key may be changed each time setItem() is
called, with the new TTL overwriting the old one.</span></font></p>

<p class="MsoNormal"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;">* If a TTL was previously set, and then a new TTL is not
provided on a subsequent call to setItem(), then the original TTL remains. </span></font></p>

<p class="MsoNormal"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;">* If a TTL was previously set, and another call is made to
setItem() that contains an invalid TTL (<= 0), then the original TTL
remains.</span></font></p>

<p class="MsoNormal"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;">* To remove a previously set TTL, you must call removeItem()
to completely remove the key and then re-add using setItem().</span></font></p>

<p class="MsoNormal"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;">* Adding a third argument means the length property of
setItem will be 3, so developers can check for support of this feature using (localStorage.setItem.length
> 2).</span></font></p>

<p class="MsoNormal"><font face="Arial" size="2"><span style="font-size: 10pt; font-family: Arial;">* The TTL is valid for both sessionStorage and localStorage,
but more important for localStorage. </span></font></p></div></div></blockquote></div>I
 like this idea. It would help deal with orphaned data that was written 
by a site, but was never removed or used after a change in the site.<br>
<br>It seems that there should be a way to change a TTL without having 
to load and set the value data again, or remove a TTL without having to 
remove the key and re-add it. While it might not be too bad to remove a 
single key and re-add it, it becomes a nuisance to remove the TTL on 
many keys by loading, removing, and re-adding each key. I'm thinking of 
scenarios where localStorage may be used to locally cache data for a 
user (e.g. an email client) where the user may have the option to choose
 to keep the data for 1 week, 1 month, etc. If the user choose to change
 the caching duration then the browser may have to load and set 5MB of 
data, just to update the TTLs.<br>
<br>My thought is that to remove a TTL we could either pass  -1 (any 
negative number perhaps) to the function to reset the TTL, or use an 
empty value (null or ""). To just change a TTL without changing the 
key/value we may consider making the second parameter optional as well, 
although I'm not in love with that idea.<br><font color="#888888">
<br></font>Paul Ellis