Уже голова пухнит от этих SESSION

narenek

Новичок
Уже голова пухнит от этих SESSION

Добрый день суток!!

Очень нужны разъяснения, пока я до суицида не дошел :)

У меня Apache 1.3.34
PHP 4.4.2
globals=no

Есть страница со следующим кодом

PHP:
<?php
ini_set('display_errors',1); 
error_reporting(E_ALL);

session_start();
if (!isset($_SESSION['useron'])) $_SESSION['useron'] = session_id();
echo $_SESSION['useron'];
?>

Что должно получаться по теории, если я правильно кучу доки пересмотрел!!
При открытие данного файла долна создаться новая session_id() и остоваться неизменной пока не закроется окно. Вроди бы так.
Но кукишь с маргарином!! Я нажимаю Ф5 и session_id() благополучно меняется!!


ПАЖАЛУЙСТА!!Объясните в чем я не прав??

Уже и FAq преречитал и кучи литературы с хелпами просмотрел, но не врубаюсь я!!

Как сделать так, чтобы при бональном обнавление страницы у меня оставался прежний session_id()??
 

narenek

Новичок
Я пошел даже дальше!!

IE - Сервис - Свойства обозревателя - Конфиденциальность - Дополнительно:

Поставил галку на "Перекрыть автаматическую обрабутку файлов cookie"

Поставил везде "Принимать"

И поставил галку на "Всегда разрешать сеансовые cookie"

(Но естественно это же не выход!!)

Проблема остается!!

И плюс еще, возможно это тоже важно:

Я немного видоизменил код:

Первый файл:
PHP:
<?php
session_start();
if (!isset($_SESSION['useron'])) $_SESSION['useron'] = session_id();
echo $_SESSION['useron'];
echo "<a href='a.php'>ссылка</a>"; 
?>

Файл a.php
PHP:
<?php 
ini_set('display_errors',1); 
error_reporting(E_ALL);

session_start(); 
echo $_SESSION['useron'];
?>
Ну так вот на первом файле если постоянно нажимать Ф5 то постоянно меняется session_id(). Но стоит только нажать ссылку на a.php:

Выдает ошибку:
Notice: Undefined index: useron in c:\home\kadr-16\www\session\a.php on line 7

(Ну это понятно).

Потом я нажимаю кнопку "Назад". И достаточно лишь раз нажать опять Ф5 и session_id(), наконец-то, остаеться одной и тойже!!

(Еще чуть-чуть и точно пойду мыло искать)!! :-(((((((

-~{}~ 16.03.06 09:32:

Да!!
Я написал немного не корректно, из-за чего, возможно суть моего вопроса ушла от истины.

Исправляюсь:

Во всей своей структуре я применял shtml
То есть:
У меня есть index.shtml, он то и является запускаемым. Вот более точный листинг:

_________
index.shtml:

PHP:
<html>
<head><title>SESSION</title></head>
<body>
<!--#include file="001.php"-->
</body>
</html>

_________
001.php

PHP:
<?php
session_start();
if (!isset($_SESSION['useron'])) $_SESSION['useron'] = session_id();
echo $_SESSION['useron'];
?>

Вот именно в такой конструкции и ничего не получается. Причем если даже переставить <!--#include file="001.php"--> в самое начало index.shtml, результат тотже!!
Однако если вызывать сам файл 001.php, то все замечательно работает!!

Как же заставить работать через shtml??
 

Igorek

Новичок
Сессия должна стартовать первой, также как и куки,
например вот так:
PHP:
<?php
session_start();
if (!isset($_SESSION['useron'])) $_SESSION['useron'] = session_id();
echo $_SESSION['useron'];
include_once("./index.shtml");
?>
Так должно работать.
И еще а зачем ты сессию из сессии тянешь ?
Не проще ли сессию в куки заложить?
А если совсем просто, то может через $_GET ее таскать например так.
PHP:
<?PHP
if(!empty($_GET["SID"])) session_start($_GET["SID"]); 
elseif (!empty($_POST["SID"])) session_start($_POST["SID"]); 
else session_start();

#... дальше проверяем параметры сессии....
?>
 

McSimm

Новичок
<!--#include file="001.php"-->
Встретив эту инструкцию в тексте хэндлер апача на сервере делает подзапрос к вашему 001.php, получает текст, вставляет его в первоначальную страницу и наконец отдает клиенту. При этом куки из 001.php получает не клиент, а сам apache, которому они в общем-то совершенно не нужны.

таким образом стартованная сессия оказывается сиротой, клиент не знает id
 

alekciy

Новичок
Igorek
bool session_start ( void ) не о чем не говорит?
Тогда уже должно быть:
PHP:
session_id($_GET["SID"]);
session_start();
Хотя я об этом вроде уже писал... затерли пост?
 

narenek

Новичок
Что косательно первого примера от Igorek, то он работает как и мой собственный, то есть не правильно (или не так как мне надо).

Косательно же второго примера, то тут дело вообще странное!!
Ведь Get и Post применяються только если передовать значения в PHP. А я ведь ничего не передаю, я хочу всеголишь присвоить постоянное значение переменной. Тут даже не дело в том что я пытаюсь session_id() вытащить. Сама пременная
PHP:
$_SESSION['useron']
каждый раз когда обновляется страница предстает как несуществующая!! И дело именно в том, что session_id() (SID) каждый раз разный.

Я немогу из .shtml, получить один SID, который небудет меняться!!



Едим дальше видем лес!!

В чем собственно-то дело!!

Этот код, это максимальная урезка того, что у меня существует на локольном сайте и отказывается работать.
Общий смысл сводится к тому, что пользователь заходит на сайт и если он Гость, то счетчик Гость/Пользователь плюсуется в пользу первого. После же авторизации один Гсоть удаляется и плюсюется один Пользователь.

Получается такой счетчик, сколько на сайте народа и кто!!

Но проблема в том, что если Гость будет просто тыкать Ф5, то счетчик Гость будет постоянно рости (что есть неправильно.)
______
Из текста McSimm, я понял, что получаеться единственная возможность запускать сессию на пользовательской машине, так это писать index.php, а не index.shtml.
Верно??

Не ужели нет никакой возможности запускать сиссии из php присаедененных к shtml??
 

kruglov

Новичок
narenek
Вот еще одна причина не использовать ssi.
Или грузите этот счетчик как картинку или через iframe
 

narenek

Новичок
Не хринова!!

Не ужели Секир Башка??

Дешевле тогда будет все кирпичи собирать через include() PHP??

Так как iframe не подходит по определеннию.
А с картинками я пока не вижу радуги :-((
 

McSimm

Новичок
это писать index.php, а не index.shtml. Верно??
Да. shtml вам куки не установит.

Не совсем верно в том плане, что единственная возможность, но скорее всего самая лучшая.
( другой вариант добиться, чтобы включение фрагмента делал не apache а клиентский браузер - можно. Это уже не ssi, конечно. HTML или JS )
 

narenek

Новичок
БИГ САНКС, И откровенно Русское СПАСИБО!!

Думаю теперь я определился с дальнейшим планом.

Ну чтож Будем переделывать Скелет.
 
Сверху