इस समस्या से बचने का एक तरीका है PHP को फ़ाइलों के बजाय डेटाबेस तालिका में सत्रों को स्टोर करने के लिए कहना।
सबसे पहले, मैं तुम्हें इस समाधान के लिए वास्तविक क्रेडिट के रूप में कुछ लिंक दे देंगे:
http://www.tonymarston.net/php-mysql/session-handler.html
http://shiflett.org/articles/storing-sessions-in-a-database
http://culttt.com/2013/02/04/how-to-save-php-sessions-to-a-database/
फिर एक कोड कार्यान्वयन मैं इन रीडिंग से ली गई:
<?php
class TLB_Sessions_in_Database
{
private $debug;
private $dbc;
function __construct()
{
$this->debug = false;
session_set_save_handler(
array($this, '_open'),
array($this, '_close'),
array($this, '_read'),
array($this, '_write'),
array($this, '_destroy'),
array($this, '_clean')
);
}
function _open()
{
if($this->debug) echo '_open:'.PHP_EOL;
if(($this->dbc = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD)) !== false)
{
$select_db = mysql_select_db(DB_NAME, $this->dbc);
$set_charset = mysql_set_charset(DB_CHARSET, $this->dbc);
if($this->debug) echo '- return: '.(($select_db && $set_charset) ? 'true' : 'false').PHP_EOL;
return($select_db && $set_charset);
}
else
{
if($this->debug) echo '- error: '.mysql_error($this->dbc).PHP_EOL;
}
return(false);
}
function _close()
{
if($this->debug) echo '_close:'.PHP_EOL;
return(mysql_close($this->dbc));
}
function _read($session_id)
{
if($this->debug) echo '_read:'.PHP_EOL;
$session_id = mysql_real_escape_string($session_id);
$sql = "SELECT `session_data` FROM `".DB_NAME."`.`php_sessions` WHERE `session_id` = '".$session_id."'";
if($this->debug) echo '- query: '.$sql.PHP_EOL;
if(($result = mysql_query($sql, $this->dbc)) !== false)
{
if(!in_array(mysql_num_rows($result), array(0, false), true))
{
$record = mysql_fetch_assoc($result);
return($record['session_data']);
}
}
else
{
if($this->debug) echo '- error: '.mysql_error($this->dbc).PHP_EOL;
}
return('');
}
function _write($session_id, $session_data)
{
if($this->debug) echo '_write:'.PHP_EOL;
$session_id = mysql_real_escape_string($session_id);
$session_data = mysql_real_escape_string($session_data);
//$sql = "REPLACE INTO `php_sessions` (`session_id`, `last_updated`, `session_data`) VALUES ('".$session_id."', '".time()."', '".$session_data."')";
$sql = "INSERT INTO `".DB_NAME."`.`php_sessions` (`session_id`, `date_created`, `session_data`) VALUES ('".$session_id."', NOW(), '".$session_data."') ON DUPLICATE KEY UPDATE `last_updated` = NOW(), `session_data` = '".$session_data."'";
if(($result = mysql_query($sql, $this->dbc)) === false)
{
if($this->debug) echo '- error: '.mysql_error($this->dbc).PHP_EOL;
}
return($result);
}
function _destroy($session_id)
{
if($this->debug) echo '_destroy:'.PHP_EOL;
$session_id = mysql_real_escape_string($session_id);
$sql = "DELETE FROM `".DB_NAME."`.`php_sessions` WHERE `session_id` = '".$session_id."'";
if(($result = mysql_query($sql, $this->dbc)) === false)
{
if($this->debug) echo '- error: '.mysql_error($this->dbc).PHP_EOL;
}
return($result);
}
function _clean($max)
{
if($this->debug) echo '_clean:'.PHP_EOL;
$sql = 'DELETE FROM `'.DB_NAME.'`.`php_sessions` WHERE `last_updated` < DATE_SUB(NOW(), INTERVAL '.$max.' SECOND)';
if(($result = mysql_query($sql, $this->dbc)) === false)
{
if($this->debug) echo '- error: '.mysql_error($this->dbc).PHP_EOL;
}
return($result);
}
}
new TLB_Sessions_in_Database();
ईएनडी।
एक सत्र शुरू करने के लिए 48 सेकंड ?? यह पागलपन है! सत्र में कितना और डेटा है? क्या आप किसी भी सत्र हैंडलिंग पुस्तकालयों का उपयोग कर रहे हैं? सत्रों को एक असामान्य स्थान पर सहेजना? डेटाबेस (अपनी अनुक्रमणिका जांचें)? गैर-स्थानीय फाइल सिस्टम? यह किस प्रकार का सर्वर चल रहा है? क्या आपके पास php.ini या .htaccess में कोई सत्र कॉन्फ़िगरेशन है? – Spudley