<div class="gmail_quote">On Thu, Mar 5, 2009 at 8:56 PM, noskule <span dir="ltr">&lt;<a href="mailto:noskule@gmx.net">noskule@gmx.net</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="im"><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
no that&#39;s this mail about. The simples way would be to write a the &quot;last action&quot; ptv on every browse and edit action. But that seams not so smart, so I thought someone knows a way to do it just if the users get&#39;s logged out. either way, by logout action and by timeout.<br>

  <br>
</blockquote>
<br></div>
a thougth about that. How does pmwiki logout a user by timeout? I guess there&#39;s some sort of timestamp. So if the user get&#39;s logged out peter&#39;s writeptv function could update the lastaction ptv.<br>
<br>
any hints?<br>
</blockquote></div><br>It gets a bit complicated there...  My understanding is that there is no &quot;positive action&quot; taken when a user&#39;s session times out.  In other words, there&#39;s no trigger that occurs or anything like that.  Rather the next time a user attempts to use that session , the timestamp of that session will be compared against the current timestamp and the timeout is recognized at that point.  (I&#39;m not sure of this, so if I&#39;m wrong someone please correct me.)  Thus it is nearly impossible to take a positive action based on this timeout...<br>
<br>HOWEVER, it is very clearly known when a person has logged in -- no ambiguity there whatsoever.  Thus my thought would be to use one logIN PTV one logOUT PTV.  At the point of login, before setting the login PTV (in other words with the OLD value) compare the login PTV with the logout PTV.  If the OLD logIN is *later* then update the logOUT PTV to the OLD logIN PTV.  Then update the login PTV to now.<br>
<br>That way if someone times out rather than logging out then the next time they log in their logout time for the previous session will be set as if they logged in and immediately logged out again.  Your list of new pages would only be messed up if a page was changed while the person was logged in during the previous session -- that page would appear as if it were new once again.  But if someone complains about that then you explain to them that they need to log out if they want to avoid that...<br>
<br>I hope that was clear -- re-reading the 2nd paragraph above it seems somewhat hopelessly convoluted, but I&#39;m pretty sure I&#39;ve got the logic correct if you can make sense of my prose...  Maybe some code/pseudo-code would help:<br>
<br>#I&#39;m not sure that ($action == &#39;login&#39;) is the correct trigger here - you want it only on a <br>#successful login and regardless of whether they logged in via a ?action=login link or<br>#because a page required authorization - I&#39;m not sure what $action is in these conditions<br>
#   Hmmm...  What if someone logs in again with another password? What then?<br>if ($action == &#39;login&#39; &amp;&amp; (some other condition that tells me the login is complete and successful?))<br>{<br>   $profilepn = MakePageName(&quot;Profiles.&quot;.$AuthId);<br>
   $oldlogin = PageVar($profilepn, &#39;$:logindate&#39;);<br>
   $oldlogout = PageVar($profilepn, &#39;$:logoutdate&#39;);<br>
   if ($oldlogin &gt; $oldlogout) <br>      writeptv($pagename, $profilepn, &#39;logoutdate&#39;, $oldlogin);<br>   writeptv($pagename, $profilepn, &#39;logindate&#39;, time());<br>
}<br><br>I suppose you could also add some arbitrary time to the last {$:logindate} but then you risk missing a page that was modified after a shorter session.  Seems better to call a page new even though it&#39;s not rather than the other way...<br>
<br>-Peter<br>