| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |
| ваше мнение |
| Автор: elferno 4.1.2010, 12:19 | ||
одна страница может использовать 4 внешних скрипта, в которых делается session_start(), вот это и есть "каждый вызов". |
| Автор: Ипатьев 4.1.2010, 12:44 |
| что значит "4 внешних скрипта"? с какой стати они "внешние", если они по определению запускаются на том же сервере? а если они внутренние, и включаются обычным инклюдом, то с какой стати в них делается session_start()? по-моему, сначала надо как бы основы выучить, как стандартный механизм сессий работает. А потом уже городить свои собственные изобретения. Вопрос файлы vs база имеет право на существование, но только не из таких неграмотных предпосылок. |
| Автор: elferno 4.1.2010, 12:51 | ||
специально для начинающих разработчиков ( чтобы не задавали глупые вопросы, не способствующие разрешению поставленного вопроса ) поясню : внешний скрипт, он же 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 |
| к сожалению, на не имеющий смысла вопрос не бывает конкретного ответа. То есть, бывает, но он вам не понравится. корень большинства проблем заключен в самомнении рекомендую менее критически отноиться к другим людям. тем более, что описанных проблем у них не возникает вот попробуйте просто для разнообразия предположить, что вопрос изначально не имел смысла, и проблема в непонимании вами элементарных основ веб-программирования. Наводящий вопрос. Почему речь зашла о "внешних скриптах" а не о других "страницах"? В чем между ними разница? |
| Автор: 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 |
| почему я не люблю форумы? потому что здесь, люди, не имея ответа на поставленный вопрос, стараются доказать ( ... доказать кому? для себя они объясняют это так : "я - эксперт и профессионал, если я не знаю как ответить на какой-то вопрос, значит это вопрос не имеет смысла, также как не имеет смысла вопрос : ' каково семейное положение цифры 5? ' " ... с точки зрения психологии - здесь все ясно и ничего нового, но у меня вопрос по программированию, так что будьте любезны |
| Автор: Ипатьев 4.1.2010, 13:48 |
| Давайте не будем рассуждать о форумах и профессионализме. лично я предпочитаю практику вы попробуйте. сделать, как собирались, "через register_globals". а потом продолжим нашу увлекательную беседу |
| Автор: elferno 4.1.2010, 14:04 |
| я не собираюсь делать через register_globals - это пример того, как могло бы это работать. |
| Автор: Ипатьев 4.1.2010, 14:08 |
| жаль, что сейчас праздники, и мало кто может разделить удовольствие от общения с вами |
| Автор: elferno 4.1.2010, 14:16 |
| я был бы благодарен админам, если бы оне почистили эту тему от бесполезных постов |
| Автор: Simpliest 4.1.2010, 14:17 | ||||||
Я последние 2 месяца 2-3 часа в день. Кто меньше? Любопытно.... Как вы определили, что коннектов открывается 4ре? Но самое любопытное (хит темы!)... как вы собирались заставить работать это: index.php
ajax.php
при помощи register_globals? Я понимаю, что разработчики google, yahoo, msn мануалы не читают. Ну а вдруг? http://php.net/mysql_pconnect P.S. Поправил опечатки в коде. |
| Автор: elferno 4.1.2010, 14:34 |
| эм ... вы вообще как себе AJAX представляете? |
| Автор: Simpliest 4.1.2010, 14:39 |
Я? Никак не представляю. Это Ипатьев у нас все знает Я вот и хотел, чтобы вы мне объяснили. Как вы планировали заставить работать ваш код через register_globals |
| Автор: 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, 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 | ||||||
А в чем тогда разница между
и
Мгм.... черт Да! Так вот... а если перед тем как думать, прочитать что написано тут http://php.net/mysql_pconnect ? P.S. Ничего личного, но у вас крайне странные представления о работе php. Для человека с опытом разработки в 6ть лет более чем странные. http://phpfaq.ru/na_tanke#js |
| Автор: elferno 4.1.2010, 15:23 | ||
там описана технология с рефрешама, а я говорю об ajax'e и ввобще не понимаю, причем здесь include, например? |
| Автор: Simpliest 4.1.2010, 15:49 |
Хорошо хоть вы поняли, что ничего не понимаете. Это уже достижение. Вобщем так, уважаемый гуру 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 |
| Как же трудно обуздать завышенное самомнение. И как же оно мешает в решении поставленной задачи |
| Автор: 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 | ||||
тогда вам сюда http://php.net/mysql_pconnect
|
| Автор: elferno 4.1.2010, 16:38 |
| я так понимаю, что если вы меня отсылаете к Первоисточнику ( http://php.net/mysql_pconnect ), то сами его прекрасно знаете и разбираетесь в том, что там написано ( раз уж вы мне его Рекомендуете ), ... это факт. а раз так, то могли бы вы просто и в двух словах объяснить мне : КАК ИМЕННО СЛЕДУЕТ РАЗРЕШИТЬ МОЙ ВОПРОС ( можно также написать кусок кода, для ясности ) |
| Автор: segrey 4.1.2010, 16:55 |
| Кусок кода у вас уже написан. Я лишь развеял ваши опасения по поводу того что будут лишние коннекты. |
| Автор: Ипатьев 4.1.2010, 17:03 |
| Другой вопрос, чего от них больше - пользы или вреда... Собственно, я был прав насчет 6 лет копи-паста |
| Автор: 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
А что в этом плохого? |
| Автор: nerezus 4.1.2010, 21:04 | ||
У нас на местном форуме есть такой ) Пишет про кодерство сайтов на асме ) |
| Автор: elferno 4.1.2010, 21:21 | ||||
вы представляете себя что это будет при большом трафике, скажем 5,000,000 пользователей в сутки ( это почти 60 в секунду ) |
| Автор: Simpliest 4.1.2010, 21:30 | ||
Я представляю. А где у вас есть только посетителей? |
| Автор: IgorIV 4.1.2010, 22:32 |
| elferno, 60 в секунду? Извини, но под это уже идут серьёзные серверы. А не как у нас с тобой. |
| Автор: Ипатьев 4.1.2010, 23:55 | ||
Ага. И все это - на mod_php. |
| Автор: VasiliyPetrovich 5.1.2010, 01:46 | ||||
Это кто тебя к таким проектам допускает с незнанием принципа работы клиент-сервер технологий и неумением читать мануалов? Дай меил своего начальника, я ему напишу, что у тебя опыта как у человека с опытом 3х месяцев программирования, так он тебя быстро уволит, ибо сразу поймет всю заваруху после твоих рук. Не хочу, чтобы человек кучу денег потерял. |
| Автор: elferno 5.1.2010, 08:11 |
| Simpliest, вот это очень хорошо, что вы представляете VasiliyPetrovich, я не удивлен, что тебе нужен этот mail, т.к. похоже твой уровеь программирования не был востребован вообще никем. Начальник у меня - я сам, и таких выскочек как ты, я на работу не беру. IgorIV, Ипатьев - хватит писать сообщения без толку, пишите что-то полезное или не пишите вовсе, я же вам уже говорил : "люди, не имея ответа на поставленный вопрос, стараются доказать ( ... доказать кому? smile ) что сам вопрос не имеет смысла. для себя они объясняют это так : "я - эксперт и профессионал, если я не знаю как ответить на какой-то вопрос, значит это вопрос не имеет смысла, также как не имеет смысла вопрос : ' каково семейное положение цифры 5? ' " ... с точки зрения психологии - здесь все ясно и ничего нового, но у меня вопрос по программированию, так что будьте любезны" по поводу копи-паста : Ипатьев, вас в детстве мама грудью кормила? |
| Автор: elferno 5.1.2010, 08:43 |
| и вообще уважаемые, это тема "Разработка систем для Web -> PHP -> PHP: Базы Данных -> хранить сессию в БД или файле", а не "я-то самый умный, а автор темы не знает школьных азов" ... дорогие мои, Тесла не знал даже школьной математики, однако это ему не мешало делать гениальные открытия, даже наоборот : чем больше вы прочитали и изучили всего по книжкам, тем меньше у вас шансов придумать что-то свое, где ваша оригинальность, живой ум, свежие идея и концепты? почему в России нет ни одного сайта мирового масштаба, таких как yahoo или google? - ответ становится понятен, посмотрев на всех вас |
| Автор: Ипатьев 5.1.2010, 09:20 |
| Похоже, задели мальчика за живое |
| Автор: Simpliest 5.1.2010, 09:59 | ||
У нас сеанс придумывания глупостей? Кто от чего должен задохнуться? 60 запросов в секунду, это не слишком серьезная нагрузка для отдельного сервера. Я вам задал ряд вопросов на которые не получил ответа: Вы себе вообще представляете, на каком у вас проекте посещаемость хотя бы в 5млн хитов в сутки? И почему имея такой проект, вы до сих пор не знаете как посмотреть количество активных коннектов к базе? Тут ведь вообще особого ума и опыта не надо - 1. Взять посмотреть число коннектов к базе. Посчитать их. 2. Взять тупо страничку с "Hello World" в которой стартует сессия по вашему методу и подключается база. 3 И эту страничку открыть из 3-4 браузеров. 4. После чего идти смело смотреть число коннектов в базе и посчитать их. Сделать это можно ровно за 4 минуты вместо рассказов о воображаемых 5млн посетителях и задохнувшемся сервере. И ткнуть "зарвавшегося" Ипатьева и остальных носом в конкретный факт. Легко ведь? Так сделайте это! |
| Автор: Ипатьев 5.1.2010, 10:05 |
| Мне кажется, это все бесполезно. О технической стороне дело тут уже не идет. Обсуждать ее или что-то доказывать - так же глупо, как обсуждать "6 лет программирования" или "безграмотного Теслу". Тут системный, к сожалению, кризис, а не технические частности. |
| Автор: elferno 5.1.2010, 10:55 | ||||
1. я представляю себе этот проект, т.к. именно над ним сейчас и работаю. 2. потому, что мне еще ни разу не доводилось выяснять этот вопрос : по поводу коннектов к базе, поэтому я и хочу здесь выяснить у людей, которые это уже знают. а как я могу посмотреть число активных коннектов к базе?
да толку-то вообще такой типаж людей меня забавляет, и на любом форуме их всегда роиться целая куча ... единственно, что в этом негативного - они мешают обсуждать суть вопроса, это да ... а так - забавные создания ))) очень, кстати на моих родителей похожи по принципы построения мышления ( если то, что происходит у них в глове можно так назвать ) |
| Автор: nerezus 5.1.2010, 11:35 | ||
Причем никто не мешает разделить фронтенд, кэш и субд на разные машинки. elferno, ты серьезно думаешь, что все вокруг дураки, а ты один такой Д'Артаньян? А может все-же попрограммируешь годик(по твоим "годам" это около 24 лет), придешь и извинишься перед теми, кто тебе пытался помочь, но кому ты весьма дерзко нахамил. Тема закрыта, т.к. переросла в оффтоп. |