htmanning has asked for the wisdom of the Perl Monks concerning the following question:

I have a script that sets 3 cookies. They have expiration dates but I don't know how to read the date and force people to login again. I've made some changes to my site and want to force people to login so their pages aren't cached. I'm reading the cookie like this:
local(@getcookies) = split (/; /,$ENV{'HTTP_COOKIE'}); local(%cookies); foreach(@getcookies){ ($ckey, $cval) = split (/=/,$_); $cookies{$ckey} = $cval; } $username = $cookies{'reguser'}; $password = $cookies{'regpass'}; $regtype = $cookies{'regtype'}; $login = "Login" if ($username && $password && !$logout); }
The cookies get set like this:
$expires=&calc_cookie_expires(-1); &write_cookies; sub write_cookies{ print "Set-Cookie: reguser=$username; expires=$expires; path=/;\n" +; print "Set-Cookie: regpass=$password; expires=$expires; path=/;\n" +; print "Set-Cookie: regtype=$regtype; expires=$expires; path=/;\n"; }
I need to read the date and based on the date force everyone to sign in again so the cookie is set again. Thanks.

Replies are listed 'Best First'.
Re: Reading cookie expired date
by CountZero (Bishop) on Apr 08, 2012 at 10:45 UTC
    For sure someone else will answer you about the cookies, but, please tell me:
    1. Wy do you use local here? I think you want to use lexical variables here and those are declared with the my keyword.
    2. Why did you prefix your subroutine calls with the & sigil? Are these subroutines prototyped and you want to avoid the prototype checks? write_cookies isn't prototyped so you should drop the &. It serves no useful purpose.
    Also, I try not to have variables inside my subroutines that are not passed in as parameters, unless it are really and truly global variables:
    sub write_cookies{ my ($username, $password, $regtype, $expires) = @_; print "Set-Cookie: reguser=$username; expires=$expires; path=/;\n +"; print "Set-Cookie: regpass=$password; expires=$expires; path=/;\n +"; print "Set-Cookie: regtype=$regtype; expires=$expires; path=/;\n" +; }
    And then call the sub as follows:
    write_cookies($username, $password, $regtype, calc_cookie_expires(-1)) +;

    CountZero

    A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James

    My blog: Imperial Deltronics
      CountZero - You're probably right. Someone else wrote these routines years ago and now I have to try and hack them up. But, the short answer is I don't really know what I'm doing. Wish I did. Thanks.
Re: Reading cookie expired date
by Anonymous Monk on Apr 08, 2012 at 11:06 UTC
Re: Reading cookie expired date
by Anonymous Monk on Apr 08, 2012 at 21:02 UTC
    Don't rely on cookie expiration dates. Use the cookie content to look-up a record in your database that tells you whether to honor the session anymore or not.