s4
changeset 697:4461d596150d
HEADS UP: session storing schema changed, which allows multi sessions
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Thu, 21 May 2020 23:33:40 +0900 |
parents | 4ebe5184a3e3 |
children | b036a06cad90 |
files | s4-funcs.sh |
diffstat | 1 files changed, 43 insertions(+), 7 deletions(-) [+] |
line diff
1.1 --- a/s4-funcs.sh Thu May 21 12:08:27 2020 +0900 1.2 +++ b/s4-funcs.sh Thu May 21 23:33:40 2020 +0900 1.3 @@ -658,13 +658,25 @@ 1.4 query "select gecos from gecoses where name=$u;" 1.5 ) 1.6 setpar() { 1.7 + # 2020/5/14 Add dirty code to cache essential params 1.8 + case "$1" in 1.9 + user) _user="$v"; err SETPARRRRR:user=$v ;; 1.10 + skey) _skey="$v"; err SETPARRRRR:skey=$v ;; 1.11 + esac 1.12 query "replace into par values('$session', '$1', '$2', \"$3\");" 1.13 } 1.14 replpar() { 1.15 query "update par set val=\"$3\" where sessid='$session' and var='$1' and type='$2';" 1.16 } 1.17 getpar() { 1.18 - val=`query "select val from par where var='$1' and sessid='$session' $2;"` 1.19 + # err GETPAR=$1, _user=$_user 1.20 + val="" 1.21 + case "$1" in # Dirty cache mechanism for high-load average 1.22 + user) val=$_user 1.23 + err GETPAR____USER=$val;; 1.24 + skey) val=$_skey; err SKEY=$val ;; 1.25 + esac 1.26 + val=${val:-`query "select val from par where var='$1' and sessid='$session' $2;"`} 1.27 ## err getpar/val1: "val=[$val]" 1.28 if [ -z "$val" ]; then 1.29 val=`query "select val from cookie where var='$1' and sessid='$session' $2;"` 1.30 @@ -681,7 +693,26 @@ 1.31 ## err getpar/ret: "val=[$val]" 1.32 echo "$val" 1.33 } 1.34 - 1.35 +setskey() { 1.36 + # For quick response...(?) 1.37 + query "REPLACE INTO $sesstb VALUES('$1', '$2', datetime('now', 'localtime', '$timeout'));" 1.38 +} 1.39 +chkskey() { 1.40 + # $1=sesskey, $user=LoginUserName 1.41 + test -z "$1" && return 1 1.42 + rowid=`query "SELECT rowid FROM $sesstb WHERE user='$user' AND skey = '$1';"` || return 2 1.43 + err CHKskey:rowid=$rowid 1.44 + if [ -n "$rowid" ]; then 1.45 + query "UPDATE $sesstb SET expire=datetime('now', 'localtime', '$timeout') WHERE rowid=$rowid;" # Errors can be ignored 1.46 + return 0 1.47 + fi 1.48 + return 1 1.49 +} 1.50 +resetskey() { 1.51 + if [ -n "$_user" ]; then 1.52 + query "DELETE FROM $sesstb WHERE user='$_user';" 1.53 + fi 1.54 +} 1.55 getpartype() { 1.56 query "select type from par where var='$1' and sessid='$session' $2;" 1.57 } 1.58 @@ -1157,6 +1188,10 @@ 1.59 for kv in `echo $HTTP_COOKIE|sed 's/[;, ]/ /g'`; do 1.60 k="${kv%%=*}" 1.61 v="`echo ${kv#*=}|nkf -Ww -mQ|sed -e 's/\"/\"\"/g'`" 1.62 + case "$k" in 1.63 + user) _user="$v"; ;; ## err FromCookie:user=$_user ;; 1.64 + skey) _skey="$v"; ;; ## err FromCookie:skey=$_skey ;; 1.65 + esac 1.66 query "replace into cookie values('$session', '$k', 'string', \"$v\");" 1.67 done 1.68 } 1.69 @@ -1290,10 +1325,10 @@ 1.70 checkauth() { 1.71 user=`getpar user` 1.72 skc=`getpar skey` # from cookie 1.73 - [ -z "$user" ] && return 3 1.74 - skey="`getpwfield $user skey`" 1.75 - if [ -n "$skey" ]; then 1.76 - if [ x"$skey" = x"$skc" ]; then 1.77 + [ -z "$user" ] && return 2 1.78 + ##skey="`getpwfield $user skey`" 1.79 + if [ -n "$skc" ]; then 1.80 + if chkskey "$skc"; then 1.81 return 0 1.82 fi 1.83 fi 1.84 @@ -1312,7 +1347,7 @@ 1.85 # putheader; echo; echo user=$user, db=$dbpswd, enc=$encpswd 1.86 if pwcheck "$pswd"; then 1.87 newsession=`genrandom 50` 1.88 - if dbsetbyid user "$user" skey "$newsession" && 1.89 + if setskey "$user" "$newsession" && 1.90 dbsetbyid user "$user" login "`date '+%F %T'`"; then 1.91 gencookie "user=$user" "skey=$newsession" 1.92 return 0 1.93 @@ -1324,6 +1359,7 @@ 1.94 } 1.95 showlogin() { 1.96 args=`echo $myargs|tr ' ' '+'` 1.97 + test -z "$args" && resetskey 1.98 s4name=${S4NAME:-s4} 1.99 ( sed '/^<body/q' $layout/html.m4.html 1.100 cat $layout/login.m4.html