Переменные и сессии (еще раз:)

DanGien

Новичок
Переменные и сессии (еще раз:)

Приветствую!

Просмотрел http://faq.phpclub.net/sessions, но там не нашел ответа на свой вопрос.

Видимо, я не совсем четко понимаю, как работают сессии. Буду благодарен за разъяснения.

1. Если я задаю переменную в сессии и даю ей значение. При переходе на др. страницу (сессия не убита) переменная тоже передается? Или нет?

2. К примеру, мне нужно такое. Человек заходит на сайт по партнерской ссылке вида index.php?parid=demo

В файле index.php я пишу такое:

if (! session_is_registered('parid'))
{
if (isset($parid)) //Если переменная $parid существует, то...
{
session_register( 'parid' ) ;
}
else
{
session_register( 'parid' ) ;
$parid = "myzakaz";
}


Т.е. если зашел по ссылке партнера, переменная parid = идент. партнера, иначе равна myzakaz.

Теперь, при переходе по страницам должна переменная с ЭТИМ ЖЕ значением передаваться.

Вышеописанный код я ставлю на ВСЕХ страницах (т.к. по партнерской ссылке могут зайти не только на index.php, но и на любую др. страницу). Т.е. логика такая:
- если переменная не зарегистрирована в сессии, то
-- если переменная существует, то регистрируем переменную
-- если переменная НЕ существует (т.е. зашли на сайт НЕ по партнерской ссылке), то регистрируем переменную и она будет равна myzakaz.

В реальности ничего не получается. На странице index.php все как надо, parid=demo, а как только я перехожу на др. страницу, становится parid=myzakaz

Получается, что эта переменная не передается с сессией на др. страницу? Как сделать, чтобы передавалась?
 

Alex2003

Новичок
Цитата:
PHP:
<? 
session_start(); 
if (!isset($_SESSION['counter'])) $_SESSION['counter']=0;
...
Нифига ты не читал, ИМХО.
 

гоша

Guest
плохо смотрел.


1. Вместо session_register() настоятельно рекомендуется использовать занесение переменных в сессию с помощью массива $_SESSION. Об этом подробно написано в документации.
 

Astral Man

We Will Rock You
DanGien
Ты один раз передаешь заначение parid, открываешь сессию, пишешь значение parid в сессию, и если тебе нужно проверяешь какое значение у parid. При переходе по ссылкам передовать parid не надо.
 

Alkinoy

Guest
какой то бред в коде. ((
слушай сюда. сессия - это просто хранилище данных. На сервере. Если в запросе клиента приходит номер сессии, и хранилище с таким номером существует - данные из этого хранилища становятся доступными скрипту. Положить данные в хранилище
$_SESSION["my_name_of_data"] = $my_var
из хранилища -
$my_var = $_SESSION["my_name_of_data"]
 

DanGien

Новичок
Спасибо за ответы!

Уже нашел:) В http://faq.phpclub.net/sessions

Несколько модифицировав код, получил:

session_start();
if (! session_is_registered('parid'))
{
if (isset($parid)) //Если переменная $parid существует, то...
{
$_SESSION['parid']=$parid;
}
else
{
$parid = "myzakaz";
$_SESSION['parid']=$parid;
}

Работает как надо!:)
 

DanGien

Новичок
Автор оригинала: Astral Man
DanGien
Ты один раз передаешь заначение parid, открываешь сессию, пишешь значение parid в сессию, и если тебе нужно проверяешь какое значение у parid. При переходе по ссылкам передовать parid не надо.
Я понял, но юзер же может войти не на главную, а на любую страницу. Поэтому я вынужден на КАЖДОЙ странице проверять, передана ли переменная parid (идентификатор партнера), и что с ней делать, если передана или НЕ передана...

Мой "бред в коде" это успешно делает:)
 

Alkinoy

Guest
во первых у тя со скобками проблемы.
во вторых два последних действия зачем? А так не проще?
$_SESSION['parid']="myzakaz";
в третьих я бы вместо первого иф писал бы
if (isset($_SESSION["myvar"])).....
 

гоша

Guest
DanGien

session_is_registered
session_register

забудь. нет больше таких функций.

PHP:
if(!isset($_SESSION['xxx']))
    if(isset($_GET['xxx']))
       $_SESSION['xxx']=$_GET['xxx'];
    else
       $_SESSION['xxx']='default-value';
}
lucas

== true

а это что еще такое?
 

Alex2003

Новичок
IMHO
PHP:
session_start();

if (!isset($_SESSION['parid'])
  $_SESSION['parid'] = isset($_GET['parid'])?$_GET['parid']:'default';

$parid = $_SESSION['parid'];
Вместо этого огорода.
 

Фанат

oncle terrible
Команда форума
я бы НАСТОЯТЕЛЬНО не рекомендовал переменным, используемым в скрипте, давать имена, совпадающие с индексами массива _SESSION.
Будут клюки.
 

Фанат

oncle terrible
Команда форума
Т.е. если зашел по ссылке партнера
в ссылке от партнера передается что-то гетом небось?
пока ты не научишься пользоваться отдельными массивами для каждого источника данных, твой скрипт не заработает, родной.
Забуь вообще про свои париды.
как переменная он ВООБЩЕ не должен существовать!

Неужели ты сам не понимаешь этого?
что они просто будут друг друга затирать?
 

Фанат

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

заранее спасибо.
 

DanGien

Новичок
Автор оригинала: Фанат
в ссылке от партнера передается что-то гетом небось?
пока ты не научишься пользоваться отдельными массивами для каждого источника данных, твой скрипт не заработает, родной.
Забуь вообще про свои париды.
как переменная он ВООБЩЕ не должен существовать!

Неужели ты сам не понимаешь этого?
что они просто будут друг друга затирать?
Да я вообще-то от "фонаря" $parid сделал. А что, где-то в php есть parid? :confused: Если да, то где?
 

DanGien

Новичок
Фанат, я понял, что ты имеешь ввиду:)

Так мне и НАДО, чтобы они затирали, меняясь на текущую. Для этого я и помещаю их в сессию, чтобы брать их оттуда и менять или менять на лету и помещать новое значение в сессию вместо старого. А "постоянные" переменные в скрипте другие:)
 

Фанат

oncle terrible
Команда форума
понимаешь, мне все равно, что тебе надо, а что не надо.
Если хочешь затирать - затирай руками. Руками!
явно это в коде написав.
Программа должна делать только то, что написано в ней, а не то, что зависит от настроек пхп.

речь о том, что ты НЕ ЗНАЕШЬ откуда у тебя $parid взялась!
Зато знаешь, откуда у тебя $_GET['parid'], $_SESSION['parid']
Ты посмотри на коды, которые тебе писали.
понял теперь?
 

DanGien

Новичок
Видимо, действительно либо я не до конца что-то понимаю, либо просто не полно изложил суть вопроса.

Фанат, дело в том, что я тут привел не весь код:) А только его часть, связанную с моим вопросом.

Изначально $parid передается скрипту в виде index.php?parid=значение. Если этого нет (переменная $parid НЕ передана, т.е. не существует, я ее завожу, причем, она тогда = myzakaz). Только потом я ее помещаю в сессию. Т.е. все делается вроде как руками.

При чем тут настройки пхп?
 

Фанат

oncle terrible
Команда форума
пробую последний раз.

$parid у тебя передается. а может - не передаваться.
передается тебе ЖЕЛЕЗНО - только $_GET['parid']
при этом ты ТОЧНО знаешь, что это у тебя пришло гетом.

И в сессию ты НИКАКОЙ $parid НЕ ЗАПИСЫВАЕШЬ!
ты записываешь некое значение в переменную $_SESSION['parid']
Это не одна переменная, а разные!

ПЕРЕСТАНЬ ПУТАТЬ ПЕРЕМЕННЫЕ! ОНИ ВСЕ РАЗНЫЕ!
а не одна и та же.

объясните ему кто-нибудь, а?
суть вопроса твоя тут не при чем.
Тебе уже все разжевали и ПРАВИЛЬНЫЙ код дали.
я тебе просто объясняю, (безуспешно), почему нигде нельзя использовать $parid
потому, что ты руками ей до использования, значение не присваивал. А значит - считай ее у тебя нету.
Я тебе объясняю, что надо всегда знать, откуда у тебя переменная.
Я тебе объясняю, что при регистер глобалс он, если у переменных совпадают имена, то получается путанница.
 
Сверху