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

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 включен
 

Фанат

oncle terrible
Команда форума
непонятно, к кому вопрос.
ты ожидаешь, что здесь объявится автор твоих пользовательских сессий, и все расскажет? или что?

-~{}~ 23.08.08 12:46:

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

Breeze

goshogun
Команда форума
Партнер клуба
[telepat mode]

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

[/telepat mode]
 

monomer

Новичок
Так.. а теперь расскажите мне как mod_rewrite влияет? .htaccess убрал - все нормально работает. Где читать?
 

kruglov

Новичок
monomer
Кому смешно, а ведь это почти прямая цитата из "где читать".

Вы где-то вызываете из страницы еще раз ее саму, как, к примеру, это делает вышеприведенный фрагмент.
 

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;
 

monomer

Новичок
Ну я же написал уже, мод реврайт убираю все работает+если бы я и вызывал еще раз эту страницу, счетчик увеличивался постоянно на 2 и 4. Я же скинул весь скрипт...
 

Фанат

oncle terrible
Команда форума
интересно, сколько раз этому альтернативно одаренному надо повторить, что код тут не при чем, чтобы он понял?
 

monomer

Новичок
нееее... давай сначала.. чет я ваще не въежаю.. объясни подробно?

-~{}~ 23.08.08 19:59:

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

Ярослав

Новичок
Автор оригинала: monomer
нееее... давай сначала.. чет я ваще не въежаю.. объясни подробно?

-~{}~ 23.08.08 19:59:

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

phprus

Moderator
Команда форума
Ярослав
Это мог быть не только favicon.
Проблема, которую назвал kruglov, тоже была озвучена на этом форуме.
 
Сверху