hdalab/sessioninfo.php
author ymh <ymh.work@gmail.com>
Tue, 17 Jan 2012 00:19:27 +0100
changeset 112 e7086d345a7c
parent 109 3371a40449c7
permissions -rw-r--r--
Merge with 6455b65fa3b7f5abc0956f02699b12dbb8295ab6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
109
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
     1
<?php
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
     2
    $basechars = '23456789abcdefghjkmnpqrstuvwxyz';
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
     3
    $base = strlen($basechars);
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
     4
    
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
     5
    function my_encode($int) {
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
     6
        global $base, $basechars;
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
     7
        $nb = $int;
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
     8
        $res = '';
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
     9
        while($nb > 0 or strlen($res) == 0) {
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    10
            $mod = $nb % $base;
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    11
            $res = $basechars[$mod].$res;
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    12
            $nb = ($nb - $mod) / $base;
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    13
        }
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    14
        return $res;
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    15
    }
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    16
    
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    17
    function my_decode($str) {
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    18
        global $base, $basechars;
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    19
        $s = strtolower($str);
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    20
        $m = 1;
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    21
        $res = 0;
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    22
        for ($i = strlen($s)-1; $i >= 0; $i--) {
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    23
            $res += $m * strpos($basechars, $s[$i]);
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    24
            $m *= $base;
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    25
        }
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    26
        return $res;
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    27
    };
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    28
    
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    29
    require('connect.inc.php');
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    30
    
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    31
    session_start();
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    32
    
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    33
    $data = isset($_REQUEST['data']) ? $_REQUEST['data'] : false;
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    34
    $insdata = pg_escape_string($data ? $data : '{}');
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    35
    
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    36
    if (isset($_REQUEST['sessionid'])) {
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    37
        $_SESSION['sessionid'] = $_REQUEST['sessionid'];
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    38
    }
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    39
    
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    40
    if (isset($_REQUEST['sessionkey'])) {
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    41
        $_SESSION['sessionkey'] = $_REQUEST['sessionkey'];
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    42
    }
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    43
    
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    44
    if (isset($_SESSION['sessionid'])) {
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    45
        $sidnum = my_decode($_SESSION['sessionid']);
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    46
        $rq = pg_query("SELECT editkey FROM hdaviz_sessions WHERE id = $sidnum");
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    47
        if ($ligne = pg_fetch_row($rq)) {
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    48
            if (isset($_SESSION['sessionkey'])) {
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    49
                $keynum = my_decode($_SESSION['sessionkey']);
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    50
                if ($keynum == $ligne[0]) {
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    51
                    $write = true;
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    52
                } else {
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    53
                    $write = false;
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    54
                    unset($_SESSION['sessionkey']);
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    55
                }
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    56
            } else {
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    57
                $keynum = false;
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    58
                $write = false;
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    59
            }
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    60
        } else {
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    61
            unset($_SESSION['sessionid']);
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    62
        }
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    63
    }
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    64
    
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    65
    if (!isset($_SESSION['sessionid'])) {
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    66
        do {
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    67
            $sidnum = mt_rand(1000, 100000000);
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    68
            $rq = pg_query("SELECT COUNT(*) FROM hdaviz_sessions WHERE id=$sidnum");
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    69
            $l = pg_fetch_row($rq);
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    70
            $nb = $l[0];
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    71
            pg_free_result($rq);
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    72
        } while ($nb > 0);
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    73
        $keynum = mt_rand(104, 100000001);
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    74
        $rq = pg_query("INSERT INTO hdaviz_sessions (id, editkey, data) VALUES ($sidnum, $keynum, '{}')");
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    75
        $write = true;
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    76
        $_SESSION['sessionid'] = my_encode($sidnum);
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    77
        $_SESSION['sessionkey'] = my_encode($keynum);
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    78
    }
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    79
    
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    80
    if ($write and $data) {
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    81
        pg_query("UPDATE hdaviz_sessions SET data='$insdata' WHERE id=$sidnum AND editkey=$keynum");
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    82
    } else {
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    83
        $rq = pg_query("SELECT data FROM hdaviz_sessions WHERE id=$sidnum");
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    84
        $l = pg_fetch_row($rq);
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    85
        $data = $l[0];
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    86
        pg_free_result($rq);
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    87
    }
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    88
    
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    89
    $resobj = array("data" => $data, "write_allowed" => $write, "sessionid" => $_SESSION['sessionid']);
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    90
    if ($write) {
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    91
        $resobj["sessionkey"] = $_SESSION['sessionkey'];
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    92
    }
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    93
    
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    94
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    95
echo json_encode($resobj);
3371a40449c7 HDA Lab 1st commit
veltr
parents:
diff changeset
    96
?>