Проблема с сессиями или с головой

IvanShumkov

Новичок
Проблема с сессиями или с головой

Сделал свой механизм сохранения сессий:
PHP:
	// Открываем сессию
	function SessionOpen($save_path, $session_name)
	{ return true; }

	// Закрываем сессию
	function SessionClose()
	{ return true; }

	// Читаем данные из сессии
	function SessionRead($id)
	{
		$result = $this->rh->db->PhQueryOne("SELECT `data` FROM `users_sessions` WHERE `id` = ?", $id);
		$this->rh->debug->Milestone('Session readed');
		
		$this->session_id = $result['data']['id'];

		if (isset($result['data'])) return $result['data'];
		else return '';
  }

	// Пишем данные в сессию
	function SessionWrite($id, $data)
	{
		if (!empty($this->session_id) && $this->fieldarray['session_id'] == $session_id)
			$this->rh->db->PhQuery("UPDATE `users_sessions` SET `data` = ?, updated = NOW() WHERE `id` = ?", $data, $id);
		else
			$this->rh->db->PhQuery("INSERT `users_sessions` SET `id` = ?, `data` = ?, updated = NOW(), created = NOW()", $id, $data);

		return true;
	}

	// Убиваем сессию
	function SessionDestroy($id)
	{
		$result = $this->rh->db->PhQuery("DELETE FROM `users_sessions` WHERE id = ?", $id);
		$this->rh->debug->Milestone('Session destroyed');

		return $result;
	}

	// Убиваем старые записи из БД
	function SessionGarbageCollection($maxLifetime)
	{
		$date = date('YmdHis', strtotime(date('Y-m-d H:i').' -'.($maxLifetime / 60).' minutes'));
		$this->rh->db->Query("DELETE FROM `users_sessions` WHERE `updated` < ".$date);
		$this->rh->debug->Milestone('Session garbage collect');

		return true;
	}
И есть странность. Делаю:
PHP:
$_SESSION['hi'] = $_SESSION['hi'] + $_SESSION['hi'];
echo $_SESSION['hi'];
И при каждом отображении страницы значение увеличивается не на один, а на два. Как такое может быть? Из за моей кривой реализации механизма сессий? Или они не причем, а это у меня редирект какой-то потерялся в коде. В чем может быть дело?
 

SelenIT

IT-лунатик :)
Не понял. Вы ожидаете, что
PHP:
$_SESSION['hi'] = $_SESSION['hi'] + $_SESSION['hi']; // ...кстати, почему не $_SESSION['hi']*2 ?
должно увеличивать значение $_SESSION['hi'] на единицу? Или я адски торможу? В общем, кому-то из нас, очевидно, пора выспаться...
 

IvanShumkov

Новичок
Автор оригинала: SelenIT
В общем, кому-то из нас, очевидно, пора выспаться...
Вы правы. Мне пора спать :).

Имелось ввиду:
PHP:
if (!isset($_SESSION['counter'])) $_SESSION['counter']=0;
echo "Вы обновили эту страницу ".$_SESSION['counter']++." раз. ";
И дело не в "моем механизме сессий", потому что даже при штатном результат один и тот же. И редиректов вроде тоже нигде нет. Что за чудо?
 

SelenIT

IT-лунатик :)
Приведенный выше код в чистом виде работает корректно.
Попробуйте вывести $_SESSION['counter'] сразу после старта сессии и в самом конце, безо всяких инкрементов.
 

IvanShumkov

Новичок
Одно и тоже значение получаю. Странно. За один запуск скрипт срабатывает два раза. Еще раз проверил - редиректов нет. Как такое может быть?

-~{}~ 22.08.05 04:58:

Может mod_rewrite?

-~{}~ 22.08.05 05:11:

Вставил
PHP:
$fp = fopen('/test'.rand().'.dat', 'w+');
fwrite($fp, 'Im working');
fclose($fp);
За один переход по ссылки либо обновление через F5 скрипт создается два файла. Сессии тут не причем.
 
Сверху