Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > сессия : хранить в БД или в файле


Автор: elferno 4.1.2010, 10:51
чтобы писать сессии в базу данных, используется функция : session_set_save_handler("open", ... )
function open($save_path,$si)
    {
    global $connect;
    
    $connect=mysql_pconnect('host','user','password');
    mysql_select_db('session_db_name',$connect);
    }

получается на каждый вызов session_start() будет происходить коннект к базе.

вопрос : может ли кто-то придумать, как сделать всего один коннект ( только первый раз )

Автор: elferno 4.1.2010, 12:02
ваше мнение

Автор: skyboy 4.1.2010, 12:11
а какая необходимость класть разнородные по содержимому данные(сессию) в БД, с учетом жесткости структуры таблицы для хранения(sessid + name + value)?

Добавлено через 1 минуту и 56 секунд

M
skyboy
впредь не дублируй темы.
хочешь создать голосование - создавай. но не в отдельной теме.

Добавлено через 3 минуты и 57 секунд
Цитата(elferno @  4.1.2010,  09:51 Найти цитируемый пост)
получается на каждый вызов session_start() будет происходить коннект к базе.

у тебя же mysql_pconnect в коде. почему ты говоришь про "на каждый вызов session_start()"?
если же использовать "обычный" mysql_connect, то нет, без подключения к БД работать с БД не получится. и нет, подключение магическим образом между запросами никак не сохранить.

Автор: elferno 4.1.2010, 12:19
Цитата(skyboy @ 4.1.2010,  10:11)
у тебя же mysql_pconnect в коде. почему ты говоришь про "на каждый вызов session_start()"?

одна страница может использовать 4 внешних скрипта, в которых делается session_start(), вот это и есть "каждый вызов".

Автор: Ипатьев 4.1.2010, 12:44
что значит "4 внешних скрипта"? с какой стати они "внешние", если они по определению запускаются на том же сервере?
а если они внутренние, и включаются обычным инклюдом, то с какой стати в них делается session_start()?

по-моему, сначала надо как бы основы выучить, как стандартный механизм сессий работает. А потом уже городить свои собственные изобретения.
Вопрос файлы vs база имеет право на существование, но только не из таких неграмотных предпосылок.

Автор: elferno 4.1.2010, 12:51
Цитата(Ипатьев @ 4.1.2010,  10:44)
что значит "4 внешних скрипта"? с какой стати они "внешние", если они по определению запускаются на том же сервере?

специально для начинающих разработчиков ( чтобы не задавали глупые  вопросы, не способствующие разрешению поставленного вопроса ) поясню : 
внешний скрипт, он же AJAX : Asincronic Javascript and Xml request

Автор: Ипатьев 4.1.2010, 13:00
все ясно.
вам сюда: http://phpfaq.ru/na_tanke
когда уясните себе основы веб-программирования, и на основании полученных знаний ответите себе на вопрос, "можно ли сделать всего один коннект", тогда и продолжим.

Автор: elferno 4.1.2010, 13:03
вы не способны понять в чем состоит вопрос.
если нет конкретных предложений - не мешайте

Автор: Ипатьев 4.1.2010, 13:11
к сожалению, на не имеющий смысла вопрос не бывает конкретного ответа. То есть, бывает, но он вам не понравится.

корень большинства проблем заключен в самомнении
рекомендую менее критически отноиться к другим людям. тем более, что описанных проблем у них не возникает  smile 

вот попробуйте просто для разнообразия предположить, что вопрос изначально не имел смысла, и проблема в непонимании вами элементарных основ веб-программирования.

Наводящий вопрос. Почему речь зашла о "внешних скриптах" а не о других "страницах"? В чем между ними разница?

Автор: elferno 4.1.2010, 13:21
чтобы у вас не было сомнений :

1. я шесть лет каждый день только и занимаюсь программированием ( с утра до вечера ).
2. те проекты, которыми я занят уникальны, сложные и я сомневаюсь, что кто-то, кроме программистов google, yahoo, msn мог бы сталкиваться с моими проблемами, поэтому я не выкладываю здесь весь код, с комментариями и пояснениями, а формулирую узко направленный вопрос :

    а. в файле index.php делается session_start(), по описанной в первом посте технологии.
    b. затем, посредством AJAX подгружается скрипт ajax.php в котором тоже делается session_start().

задача в том, чтобы connect к базе делался единственный раз в index.php. как это реализовать?
вот простейший пример : через register_globals, т.е. описанная в первом посте функция open примет вид :

function open($save_path,$si)
    {
    if(!$_CONNECT)
        {
        $_CONNECT=mysql_pconnect('host','user','password');
        mysql_select_db('session_db_name',$_CONNECT);
        }
    }

но использовать register_globals не целесообразно из соображений безопасности, поэтому нужен альтернативный вариант


Автор: Ипатьев 4.1.2010, 13:38
ноу, как говорится, комментс.
сливай свет, туши воду.

причем я даже готов поверить в 6 лет. копи-паста.

уважаемый. вы это. попробуйте сделать с "register_globals". не насовсем, а просто в качестве теста.
после того, как не получится, попробуйте объяснить себе - почему. и при чем здесь register_globals вообще. 

Автор: elferno 4.1.2010, 13:43
почему я не люблю форумы? потому что здесь, люди, не имея ответа на поставленный вопрос, стараются доказать ( ... доказать кому? smile ) что сам вопрос не имеет смысла.
для себя они объясняют это так : "я - эксперт и профессионал, если я не знаю как ответить на какой-то вопрос, значит это вопрос не имеет смысла, также как не имеет смысла вопрос : ' каково семейное положение цифры 5? ' " ...

с точки зрения психологии - здесь все ясно и ничего нового, но у меня вопрос по программированию, так что будьте любезны

Автор: Ипатьев 4.1.2010, 13:48
Давайте не будем рассуждать о форумах и профессионализме.
лично я предпочитаю практику
вы попробуйте. сделать, как собирались, "через register_globals". а потом продолжим нашу увлекательную беседу smile

Автор: elferno 4.1.2010, 14:04
я не собираюсь делать через register_globals - это пример того, как могло бы это работать.

Автор: Ипатьев 4.1.2010, 14:08
жаль, что сейчас праздники, и мало кто может разделить удовольствие от общения с вами smile

Автор: elferno 4.1.2010, 14:16
я был бы благодарен админам, если бы оне почистили эту тему от бесполезных постов

Автор: Simpliest 4.1.2010, 14:17
Цитата(elferno @  4.1.2010,  12:21 Найти цитируемый пост)
1. я шесть лет каждый день только и занимаюсь программированием ( с утра до вечера ).

Я последние 2 месяца 2-3 часа в день. Кто меньше? smile

Любопытно.... Как вы определили, что коннектов открывается 4ре? smile

Но самое любопытное (хит темы!)... как вы собирались заставить работать это:

index.php
Код

<?php
$GLOBALS['stupid'] = 'will not work';
var_dump($GLOBALS);
?>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" ></script>
<script type="text/javascript">
   $.get('ajax.php', function(data, status) {
        alert(data);
    });
</script>

ajax.php
Код

var_dump($GLOBALS['stupid']);


при помощи register_globals?  smile  smile  smile  smile 

Я понимаю, что разработчики google, yahoo, msn мануалы не читают. Ну а вдруг?
http://php.net/mysql_pconnect

P.S. Поправил опечатки в коде.

Автор: elferno 4.1.2010, 14:34
эм ... вы вообще как себе AJAX представляете?

Автор: Simpliest 4.1.2010, 14:39
Цитата(elferno @  4.1.2010,  13:34 Найти цитируемый пост)
эм ... вы вообще как себе AJAX представляете? 

Я? Никак не представляю. Это Ипатьев у нас все знает smile

Я вот и хотел, чтобы вы мне объяснили. Как вы планировали заставить работать ваш код через register_globals smile

Автор: elferno 4.1.2010, 14:57
1. функция session_start() в index.php производит коннект к базе ( mysql_pconnect(...) ), этот коннект работает только в пределах index.php.
2. технология AJAX позволяет с клиента ( JavaScript ) обратиться к серверу ( PHP ). т.е. из indexp.php идет запрос в ajax.php
3. в ajax.php тоже вызывается функция session_start(), которая делает коннект к базе.
4. теперь я думаю : index.php уже имеет открытый коннект к базе, надо сделать так, чтобы ajax.php использовал этот же коннект, т.е. как я себе понимаю, если идентификатор коннекта $connect=mysql_pconnect( ... ) сделать через register_globals : $_CONNECT=mysql_pconnect( ... ) ), то он ( идентификатор из index.php ) станет доступен в скрипте ajax.php, как раз через переменную, которая register_globals и можно будет воспользоваться им, чтобы не делать лишний коннект к базе

Автор: Ипатьев 4.1.2010, 15:00
Цитата(elferno @  4.1.2010,  14:57 Найти цитируемый пост)
из indexp.php идет запрос в ajax.php

а если подумать?

Автор: elferno 4.1.2010, 15:06
if(i_have_idea===true)continue;
else go_to_forum_and_aks();

Автор: Ипатьев 4.1.2010, 15:12
а я давал, между прочим, ссылку, в которой доступным языком написано, откуда, на самом деле идет запрос в ajax.php

Автор: Simpliest 4.1.2010, 15:12
Цитата(elferno @  4.1.2010,  13:57 Найти цитируемый пост)
 т.е. из indexp.php идет запрос в ajax.php

А в чем тогда разница между
Код

$.get('ajax.php');

и 
Код

<?php
include ajax.php


Цитата(elferno @  4.1.2010,  13:57 Найти цитируемый пост)
4. теперь я думаю : index.php уже имеет открытый коннект к базе, надо сделать так, чтобы ajax.php использовал этот же коннект, 

Мгм.... черт smile Хотел написать, "а если не думать" smile но Ипатьев обогнал с абсолютно противоположным предложением smile
Да! 
Так вот... а если перед тем как думать, прочитать что написано тут http://php.net/mysql_pconnect ?

P.S. Ничего личного, но у вас крайне странные представления о работе php. Для человека с опытом разработки в 6ть лет более чем странные.
http://phpfaq.ru/na_tanke#js

Автор: elferno 4.1.2010, 15:23
Цитата(Ипатьев @ 4.1.2010,  13:12)
а я давал, между прочим, ссылку, в которой доступным языком написано, откуда, на самом деле идет запрос в ajax.php

там описана технология с рефрешама, а я говорю об ajax'e и ввобще не понимаю, причем здесь include, например? smile

Автор: Simpliest 4.1.2010, 15:49
Цитата(elferno @  4.1.2010,  14:23 Найти цитируемый пост)
и ввобще не понимаю, причем здесь include, например?

Хорошо хоть вы поняли, что ничего не понимаете. Это уже достижение.

Вобщем так, уважаемый гуру elferno, простите, что приходится вас просвещать.... но:

1. Скрипт index.php и "страница по адресу" (URI) http://localhost/index.php это абсолютно разные вещи.
2. ajax запрос обращается по адресу и получает содержимое страницы. И ни о каком скрипте он знать не знает.
3. register_globals отвечает за регистрацию параметров полученых через GET/POST в качестве глобальных переменных.
4. глобальные переменные между запросами по конкретному URI сами по себе не передаются.
5. Ресурсы PHP(а коннект это именно ресурс) через GET/POST тоже не передаются поэтому ваши потуги бессмысленны.

И последнее - самое главное.
Прочтите, черт возьми мануал! http://php.net/mysql_pconnect 
Не можете прочесть - возьмите и вручную посчитайте сколько у вас коннектов к базе при работе скрипта.

И не парьте всем мозги. Потому что это азы!

Автор: elferno 4.1.2010, 15:58
1. всю описанную вами кухню я знаю итак, не стоило утруждаться.
2. про регистер глобалс я сказал : НАПРИМЕР! - это значит, что я не утверждаю, что это РАБОТАЕТ.
3. у вас есть идея, как реализовать то, что мне нужно? заметьте, РЕАЛИЗОВАТЬ ПОЛЕЗНЫЙ КОД, а не ПРИВЕСТИ МНЕ ДОВОДЫ ПОЧЕМУ НЕ БУДЕТ РАБОТАТЬ register globals.

надеюсь мы друг друга поняли?

Автор: Ипатьев 4.1.2010, 16:00
Как же трудно обуздать завышенное самомнение.
И как же оно мешает в решении поставленной задачи smile

Автор: segrey 4.1.2010, 16:15
Почему pconnect открывает новое соединение? Что происходит с предыдущим? Можно логи в студию?

Автор: elferno 4.1.2010, 16:19
1. предидущее соединение закрывается по завершении работы скрипта index.php, я полагаю.
2. новое соединение открывается в ajax.php, который запрашивается аджаксом из index.php
3. задача : сделать так, чтобы соединение из index.php оставалось открытым и ajax.php им воспользовался, а не открывал свое соединение.

Автор: segrey 4.1.2010, 16:24
Цитата(elferno @  4.1.2010,  14:19 Найти цитируемый пост)
предидущее соединение закрывается по завершении работы скрипта index.php, я полагаю.

тогда вам сюда http://php.net/mysql_pconnect
Цитата
the connection to the SQL server will not be closed when the execution of the script ends.

Автор: elferno 4.1.2010, 16:38
я так понимаю, что если вы меня отсылаете к Первоисточнику ( http://php.net/mysql_pconnect ), то сами его прекрасно знаете и разбираетесь в том, что там написано ( раз уж вы мне его Рекомендуете ), ... это факт. а раз так, то могли бы вы просто и в двух словах объяснить мне : КАК ИМЕННО СЛЕДУЕТ РАЗРЕШИТЬ МОЙ ВОПРОС ( можно также написать кусок кода, для ясности )

Автор: segrey 4.1.2010, 16:55
Кусок кода у вас уже написан. Я лишь развеял ваши опасения по поводу того что будут лишние коннекты.

Автор: Ипатьев 4.1.2010, 17:03
Другой вопрос, чего от них больше - пользы или вреда... smile

Цитата(elferno @  4.1.2010,  16:38 Найти цитируемый пост)
можно также написать кусок кода

Собственно, я был прав насчет 6 лет копи-паста smile

Автор: elferno 4.1.2010, 17:05
т.е. вы хотите сказать, что pconnect, в отличае от connect не закрывается по окончании работы скрипта и другой скрипт может воспользоваться уже готовым коннектом, я правильно понял? также можно держать одновременно несколько pconnect'ов.

Автор: elferno 4.1.2010, 17:46
тогда получается, что я должен буду этот $pconnect закрыть mysql_close($pconnect); ... но поскольку он открыт для работы с сессией, мне его закрывать не надо до тех пор, пока пользователь находится на сайте ... я вижу только 1 выход : если у pconnecta есть системное "время жизни", например 15 минут, и, если его не использовали в это время - он автоматом закроется ...

так это работает?

Автор: IgorIV 4.1.2010, 19:48
http://docs.php.net/manual/ru/features.persistent-connections.php


Цитата(elferno @  4.1.2010,  11:51 Найти цитируемый пост)
получается на каждый вызов session_start() будет происходить коннект к базе.

А что в этом плохого?

Автор: nerezus 4.1.2010, 21:04
Цитата

жаль, что сейчас праздники, и мало кто может разделить удовольствие от общения с вами 
 Ггг, радует даже при 39.5° =)
У нас на местном форуме есть такой ) Пишет про кодерство сайтов на асме )

Автор: elferno 4.1.2010, 21:21
Цитата(IgorIV @ 4.1.2010,  17:48)
Цитата(elferno @  4.1.2010,  11:51 Найти цитируемый пост)
получается на каждый вызов session_start() будет происходить коннект к базе.

А что в этом плохого?

вы представляете себя что это будет при большом трафике, скажем 5,000,000 пользователей в сутки ( это почти 60 в секунду )

Автор: Simpliest 4.1.2010, 21:30
Цитата(elferno @  4.1.2010,  20:21 Найти цитируемый пост)
вы представляете себя что это будет при большом трафике, скажем 5,000,000 пользователей в сутки ( это почти 60 в секунду ) 

Я представляю.

А где у вас есть только посетителей? smile Вы представляете? smile

Автор: IgorIV 4.1.2010, 22:32
elferno, 60 в секунду? smile И часто люди лазят по сайтам в 3-4 часа ночи? То есть там может быть и 1000 в секунду.
Извини, но под это уже идут серьёзные серверы. А не как у нас с тобой. 


Автор: Ипатьев 4.1.2010, 23:55
Цитата(elferno @  4.1.2010,  21:21 Найти цитируемый пост)
вы представляете себя что это будет при большом трафике, скажем 5,000,000

Ага. И все это - на mod_php. 


Автор: VasiliyPetrovich 5.1.2010, 01:46
Цитата

те проекты, которыми я занят уникальны, сложные и я сомневаюсь, что кто-то, кроме программистов google, yahoo, msn мог бы сталкиваться с моими проблемами

Цитата

скажем 5,000,000 пользователей в сутки ( это почти 60 в секунду ) 

Это кто тебя к таким проектам допускает с незнанием принципа работы клиент-сервер технологий и неумением читать мануалов?
Дай меил своего начальника, я ему напишу, что у тебя опыта как у человека с опытом 3х месяцев программирования, так он тебя быстро уволит, ибо сразу поймет всю заваруху после твоих рук. Не хочу, чтобы человек кучу денег потерял.

Автор: elferno 5.1.2010, 08:11
Simpliest, вот это очень хорошо, что вы представляете smile по вашим данным : машина не задохнется от кучи коннектов?
VasiliyPetrovich, я не удивлен, что тебе нужен этот mail, т.к. похоже твой уровеь программирования не был востребован вообще никем. Начальник у меня - я сам, и таких выскочек как ты, я на работу не беру.
IgorIV, Ипатьев - хватит писать сообщения без толку, пишите что-то полезное или не пишите вовсе, я же вам уже говорил : "люди, не имея ответа на поставленный вопрос, стараются доказать ( ... доказать кому? smile ) что сам вопрос не имеет смысла.
для себя они объясняют это так : "я - эксперт и профессионал, если я не знаю как ответить на какой-то вопрос, значит это вопрос не имеет смысла, также как не имеет смысла вопрос : ' каково семейное положение цифры 5? ' " ...

с точки зрения психологии - здесь все ясно и ничего нового, но у меня вопрос по программированию, так что будьте любезны"

по поводу копи-паста : Ипатьев, вас в детстве мама грудью кормила?

Автор: elferno 5.1.2010, 08:43
и вообще уважаемые, это тема "Разработка систем для Web -> PHP -> PHP: Базы Данных -> хранить сессию в БД или файле", а не "я-то самый умный, а автор темы не знает школьных азов" ...
дорогие мои, Тесла не знал даже школьной математики, однако это ему не мешало делать гениальные открытия, даже наоборот : чем больше вы прочитали и изучили всего по книжкам, тем меньше у вас шансов придумать что-то свое, где ваша оригинальность, живой ум, свежие идея и концепты? почему в России нет ни одного сайта мирового масштаба, таких как yahoo или google? - ответ становится понятен, посмотрев на всех вас smile

Автор: Ипатьев 5.1.2010, 09:20
Похоже, задели мальчика за живое smile

Автор: Simpliest 5.1.2010, 09:59
Цитата(elferno @  5.1.2010,  07:11 Найти цитируемый пост)
 вы представляете  по вашим данным : машина не задохнется от кучи коннектов?

У нас сеанс придумывания глупостей?
Кто от чего должен задохнуться?

60 запросов в секунду, это не слишком серьезная нагрузка для отдельного сервера.

Я вам задал ряд вопросов на которые не получил ответа:

Вы себе вообще представляете, на каком у вас проекте посещаемость хотя бы в 5млн хитов в сутки?

И почему имея такой проект, вы до сих пор не знаете как посмотреть количество активных коннектов к базе?

Тут ведь вообще особого ума и опыта не надо -
1. Взять посмотреть число коннектов к базе. Посчитать их.
2. Взять тупо страничку с "Hello World" в которой стартует сессия по вашему методу и подключается база.
3 И эту страничку открыть из 3-4 браузеров. 
4. После чего идти смело смотреть число коннектов в базе и  посчитать их. 


Сделать это можно ровно за 4 минуты вместо рассказов о воображаемых 5млн посетителях и задохнувшемся сервере.

И ткнуть "зарвавшегося" Ипатьева и остальных носом в конкретный факт. Легко ведь? smile
Так сделайте это!


Автор: Ипатьев 5.1.2010, 10:05
Мне кажется, это все бесполезно.
О технической стороне дело тут уже не идет.
Обсуждать ее или что-то доказывать - так же глупо, как обсуждать "6 лет программирования" или "безграмотного Теслу".
Тут системный, к сожалению, кризис, а не технические частности.

Автор: elferno 5.1.2010, 10:55
Цитата(Simpliest @ 5.1.2010,  07:59)
Я вам задал ряд вопросов на которые не получил ответа:

Вы себе вообще представляете, на каком у вас проекте посещаемость хотя бы в 5млн хитов в сутки?

И почему имея такой проект, вы до сих пор не знаете как посмотреть количество активных коннектов к базе?

1. я представляю себе этот проект, т.к. именно над ним сейчас и работаю.
2. потому, что мне еще ни разу не доводилось выяснять этот вопрос : по поводу коннектов к базе, поэтому я и хочу здесь выяснить у людей, которые это уже знают.

а как я могу посмотреть число активных коннектов к базе?


Цитата(Simpliest @ 5.1.2010,  07:59)
И ткнуть "зарвавшегося" Ипатьева и остальных носом

да толку-то smile они видимо мнят себя какими-то психологами или еще кем угодно, только не программистами ... взять даже к примеру пост Ипатьева : "Похоже, задели мальчика за живое smile" - о чем нужно думать и к чему стремиться, чтобы такое написать? ))) может быть они думают, что здесь идет какая-то война ?
вообще такой типаж людей меня забавляет, и на любом форуме их всегда роиться целая куча ... единственно, что в этом негативного - они мешают обсуждать суть вопроса, это да ... а так - забавные создания ))) очень, кстати на моих родителей похожи по принципы построения мышления ( если то, что происходит у них в глове можно так назвать )

Автор: nerezus 5.1.2010, 11:35
Цитата

60 запросов в секунду, это не слишком серьезная нагрузка для отдельного сервера.
 С пиковой загрузкой 100 справится даже атомный неттоп. При 60 средней пиковая будет больше, но вместо неттопа за $350 можно использовать и нормальную машнку ;)
Причем никто не мешает разделить фронтенд, кэш и субд на разные машинки.



elferno, ты серьезно думаешь, что все вокруг дураки, а ты один такой Д'Артаньян? А может все-же попрограммируешь годик(по твоим "годам" это около 24 лет), придешь и извинишься перед теми, кто тебе пытался помочь, но кому ты весьма дерзко нахамил.

Тема закрыта, т.к. переросла в оффтоп.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)