Session, ошибочка...

  • Автор темы Автор темы monomer
  • Дата начала Дата начала

monomer

Новичок
Session, ошибочка...

юзаю пользовательские сессии
пишу скриптик:
PHP:
new session();
if(!isset($_SESSION['x'])) $_SESSION['x']=1;
if(!isset($_SESSION['g'])) $_SESSION['g']=1;
$_SESSION['x']+=1;
$_SESSION['g']+=2;
открываю страницу, смотрю БД там: "x|i:3;g|i:5;", обновляю страницу, смотрю БД там: "x|i:4;g|i:7;"
Если делать дамп переменных, все верно(при первом запуске x=2 g=3, при втором запуске уже x=4 g=7)
Делал дамп в методе write($id,$data), переменной $data выводит "x|i:2;g|i:3;", но почему пишет зыписывает "x|i:3;g|i:5;"???
Display error включен
 
непонятно, к кому вопрос.
ты ожидаешь, что здесь объявится автор твоих пользовательских сессий, и все расскажет? или что?

-~{}~ 23.08.08 12:46:

cDLEON
по-моему, при первом заходе должно быть 2,3, а не 3,5
 
[telepat mode]

ModRewrite и почему sql-запрос два раза выполняется? :)

[/telepat mode]
 
Так.. а теперь расскажите мне как mod_rewrite влияет? .htaccess убрал - все нормально работает. Где читать?
 
monomer
Кому смешно, а ведь это почти прямая цитата из "где читать".

Вы где-то вызываете из страницы еще раз ее саму, как, к примеру, это делает вышеприведенный фрагмент.
 
да?
я так не думаю.
PHP:
define('MYSQLI_HOST','localhost');
define('MYSQLI_USER','root');
define('MYSQLI_PASSWORD','');
define('MYSQLI_DATABASE','cmsw');

define('SESSION_LIFE_TIME',1440);
define('SESSION_PROBABILITY',20);
define('SESSION_NAME','SID');
define('SESSION_HASH','1');
define('SESSION_HASH_BITS','5');

function real_escape_string($string) {
 global $mysqli;
 if(get_magic_quotes_gpc()) $string=stripslashes($string);
 $string=mysqli_real_escape_string($mysqli,$string);
 return $string;
}
$mysqli=mysqli_connect(MYSQLI_HOST,MYSQLI_USER,MYSQLI_PASSWORD,MYSQLI_DATABASE);

class session
{
 /*
 CREATE TABLE `session` (
 `id` CHAR(32) BINARY CHARSET utf8 COLLATE utf8_bin NOT NULL,
 `expire` INT(10) unsigned NOT NULL default 0,
 `data` TEXT NOT NULL COLLATE utf8_unicode_ci,
 PRIMARY KEY (`id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
 */
 private $table_name='';
 public function __construct($table_name='session') {
  $this->table_name=$table_name;
  session_set_save_handler(
   array(&$this,'open'), 
   array(&$this,'close'), 
   array(&$this,'read'), 
   array(&$this,'write'), 
   array(&$this,'destroy'), 
   array(&$this,'gc')
  );
  register_shutdown_function('session_write_close');
  session_start();
 }
 public function open($path,$name) {
  return TRUE;
 }
 public function close() {
  return TRUE;
 }
 public function read($id) {
  global $mysqli;
  $sql=sprintf("SELECT `data` FROM `%s` WHERE `id`='%s';",
               $this->table_name,
               $id
              );
  if($result=$mysqli->query($sql))
   if(mysqli_num_rows($result)) {
    $data=mysqli_fetch_assoc($result);
	return (string)$data['data'];
   }
  return '';
 }
 public function write($id,$data) {
  global $mysqli;
  $sql=sprintf("REPLACE INTO `%s` (`id`,`expire`,`data`) VALUES('%s',%s,'%s');",
               $this->table_name,
               $id,
			   time(),
			   real_escape_string($data)
              );
  return $mysqli->query($sql);
 }
 public function destroy($id) {
  global $mysqli;
  $sql=sprintf("DELETE FROM `%s` WHERE `id`='%s';",
               $this->table_name,
               $id
              );
  return $mysqli->query($sql);
 }
 public function gc($max) {
  global $mysqli;
  $sql=sprintf("DELETE FROM `%s` WHERE `expire`<%s;",
               $this->table_name,
			   time()-$max
			  );
  return $mysqli->query($sql);
 }
}
function session_init() {
 ini_set('session.gc_maxlifetime',SESSION_LIFE_TIME);
 ini_set('session.gc_probability',SESSION_PROBABILITY);
 ini_set('session.name',SESSION_NAME);
 ini_set('session.hash_function',SESSION_HASH);
 ini_set('session.hash_bits_per_character',SESSION_HASH_BITS);
 new session();
}
session_init();

if(!isset($_SESSION['x'])) $_SESSION['x']=1;
if(!isset($_SESSION['g'])) $_SESSION['g']=1;
$_SESSION['x']+=1;
$_SESSION['g']+=2;
 
Ну я же написал уже, мод реврайт убираю все работает+если бы я и вызывал еще раз эту страницу, счетчик увеличивался постоянно на 2 и 4. Я же скинул весь скрипт...
 
интересно, сколько раз этому альтернативно одаренному надо повторить, что код тут не при чем, чтобы он понял?
 
нееее... давай сначала.. чет я ваще не въежаю.. объясни подробно?

-~{}~ 23.08.08 19:59:

тэк.... хы.........
ммм ладно, такая ситуация получилась..
пытаетца иконка грузится..... реврайт её отправляет к этому скрипту....
Всем спс.. Просто даже не подозревал что такое возможно=) Мона закрыть тему
 
Автор оригинала: monomer
нееее... давай сначала.. чет я ваще не въежаю.. объясни подробно?

-~{}~ 23.08.08 19:59:

тэк.... хы.........
ммм ладно, такая ситуация получилась..
пытаетца иконка грузится..... реврайт её отправляет к этому скрипту....
Всем спс.. Просто даже не подозревал что такое возможно=) Мона закрыть тему
=)
хех у меня тоже как то раз такая ситуация была
тоже пришел на форум начал ныть что вот хрень 2 раза выполняеться, куда копать.
Самое интерестное тогда было то что когда дебажил через vim+xdebug все работало.
Просто немог догнать что это favicon.
Потом после пинка ФАНАТа всегда если что проверяю логи сервера :cool:
 
Ярослав
Это мог быть не только favicon.
Проблема, которую назвал kruglov, тоже была озвучена на этом форуме.
 
Сверху