note 123917 added to function.session-start
| From: | hu60 dot cn at gmail dot com | Date: | Sun, 09 Jun 2019 12:43:48 +0000 |
| Subject: | note 123917 added to function.session-start | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-211198@lists.php.net to get a copy of this message | ||
The following code shows how the PHP session works. The function my_session_start() does almost the
same thing as session_start().
<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('session.save_path', __DIR__);
my_session_start();
echo '<p>session id: '.my_session_id().'</p>';
echo '<code><pre>';
var_dump($_SESSION);
echo '</pre></code>';
$now = date('H:i:s');
if (isset($_SESSION['last_visit_time'])) {
echo '<p>Last Visit Time:
'.$_SESSION['last_visit_time'].'</p>';
}
echo '<p>Current Time: '.$now.'</p>';
$_SESSION['last_visit_time'] = $now;
function my_session_start() {
global $phpsessid, $sessfile;
if (!isset($_COOKIE['PHPSESSID']) || empty($_COOKIE['PHPSESSID'])) {
$phpsessid = my_base32_encode(my_random_bytes(16));
setcookie('PHPSESSID', $phpsessid, ini_get('session.cookie_lifetime'),
ini_get('session.cookie_path'), ini_get('session.cookie_domain'),
ini_get('session.cookie_secure'), ini_get('session.cookie_httponly'));
} else {
$phpsessid = substr(preg_replace('/[^a-z0-9]/', '',
$_COOKIE['PHPSESSID']), 0, 26);
}
$sessfile = ini_get('session.save_path').'/sess_'.$phpsessid;
if (is_file($sessfile)) {
$_SESSION = unserialize(file_get_contents($sessfile));
} else {
$_SESSION = array();
}
register_shutdown_function('my_session_save');
}
function my_session_save() {
global $sessfile;
file_put_contents($sessfile, serialize($_SESSION));
}
function my_session_id() {
global $phpsessid;
return $phpsessid;
}
function my_random_bytes($length) {
if (function_exists('random_bytes')) {
return random_bytes($length);
}
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= chr(rand(0, 255));
}
return $randomString;
}
function my_base32_encode($input) {
$BASE32_ALPHABET = 'abcdefghijklmnopqrstuvwxyz234567';
$output = '';
$v = 0;
$vbits = 0;
for ($i = 0, $j = strlen($input); $i < $j; $i++) {
$v <<= 8;
$v += ord($input[$i]);
$vbits += 8;
while ($vbits >= 5) {
$vbits -= 5;
$output .= $BASE32_ALPHABET[$v >> $vbits];
$v &= ((1 << $vbits) - 1);
}
}
if ($vbits > 0) {
$v <<= (5 - $vbits);
$output .= $BASE32_ALPHABET[$v];
}
return $output;
}
----
Server IP: 208.43.231.9
Probable Submitter: 119.81.81.244 (proxied: 202.133.212.162)
----
Manual Page -- http://php.net/manual/en/function.session-start.php
Edit -- https://master.php.net/note/edit/123917
Del: integrated -- https://master.php.net/note/delete/123917/integrated
Del: useless -- https://master.php.net/note/delete/123917/useless
Del: bad code -- https://master.php.net/note/delete/123917/bad+code
Del: spam -- https://master.php.net/note/delete/123917/spam
Del: non-english -- https://master.php.net/note/delete/123917/non-english
Del: in docs -- https://master.php.net/note/delete/123917/in+docs
Del: other reasons-- https://master.php.net/note/delete/123917
Reject -- https://master.php.net/note/reject/123917
Search -- https://master.php.net/manage/user-notes.php