заголовки и сессия - обойти противоречия

ek-na

Новичок
заголовки и сессия - обойти противоречия

У меня такая проблема, мне нужно послать серверу заголовок header и одновременно мне нужна сессия на странице (session_start), про обе функции написано что они должны быть первыми на странице, короче когда у меня есть сессия у меня не работает заголовок :( , что делать???
 

Dreammaker

***=Ф=***
Или Вам это не нужно (с) кто-то там или давайте пример, что именно Вы делаете, воможно это можно сделать по другому в Вашем случае..
 

ek-na

Новичок
Постараюсь объяснить.. мне нужно знать когда был загружен файл, я посылаю заголовок: header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); затем его пытаюсь получить обратно:
$request = getallheaders(); Так вот, если нет сесии, то после второго захода на страницу isset($request['If-Modified-Since'])=true, а если есть, то этот заголовок не возвращается!!
Цель скрипта такая, мне нужно кэшировать страницу на стороне клиента, но контролировать кэш на сервере, то есть заголовки типа header("Cache-control: private, max-age=10"); или header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 10) . 'GMT'); не подойдут.
 

Фанат

oncle terrible
Команда форума
ek-na
про причину ты ничего не понял.
найди какой-нибудь вменяемый текст, в котором нормально объясняется, где и как должны быть расположены функции, отсылающие НТТР заголовки. а не детский лепет "первая на странице".

А следствие совершенно очевидное.
Если ты понимаешь, что такое сессия, то должен и понимать, что основная её задача - запрещать всякое кэширование.
Что ты и имеешь. Всё правильно и логично.

Судя по всему, тебе сессия просто не нужна.
 

ek-na

Новичок
it-master,

Про кэширование на стороне сервера я знаю, по этому поводу куча классов уже есть готовых, мне нужно с сервера контролировать кэш клиента.
На самом деле там еще куча проблем, например, как сделать, чтобы клиент страницу закэшировал, но при повторном запросе, не брал ее сразу из кэша, а сходил на сервер, а там уже какая то часть кода выполняется и по ситуации, сервер либо выдает новую страницу, либо посылает заголовок клиенту, чтобы тот брал страницу из кэша. Вот что мне нужно в идеале, ну и конечно, чтобы при этом сессия работала и заголовкам не мешала тоже работать :)
 

Фанат

oncle terrible
Команда форума
it-master
ой ти мастер! Какая лапочка =)
и что же ты хотел сказать своим глубокомысленным замечанием?

-~{}~ 21.07.06 10:09:

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

прошу отнестись к моим вопросам ответственно.
 

ek-na

Новичок
Фанат,

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

Фанат

oncle terrible
Команда форума
красивая отмазка.
Но есть одна проблема.
Мы здесь - люди не подневольные.
я бы даже сказал - наоборот. противоположные подневольным.
И мы очень не любим заниматься глупостями, высосанными из чьего-то начальнического пальца (как нам это преподносят, а мы делаем вид, что верим).

а ещё мы задаём неудобные вопросы.
К примеру, почему, если сайт локальный, то возникла вдруг проблема с кэшированием?

а ещё нам не нравится, что отвечают нам не по существу вопроса, а отпиской "так надо".
Я правильно понял тебя, что ты не понимаешь ни сути своего задания, ни причин, заставляющих тебя делать именно так?
В таком случае, я вынужден тебя попросить удалиться за разъяснениями, и продолжить свои вопросы только после того, как ты сможешь дать осмысленные объяснения тому, что ты делаешь
 

ek-na

Новичок
А вот это что???
Автор оригинала: ek-na
...а нужно это затем, чтобы не тратить лишних ресурсов сервера (ну и наших - писать код), а воспользоваться тем, что могут за нас сделать браузеры...
 

Фанат

oncle terrible
Команда форума
отдавать всё напрямую, по запросу - это самый минималистический подход в плане написания кода.
то есть, отмазка про "писать код" не канает.
по поводу ресурсов сервера - какие объективные предпосылки к экономии?
 

ek-na

Новичок
Ты вообще знаешь, зачем придуман кэш??
Вот за этим он мне и нужен, страница напичкана запросами, которые меняются не так часто, а время на их выполнение тратится, поэтому
>> отдавать все напрямую по запросу
не канает.
Кэш нужен, а вот где, на сервере, у клиента - вот этот вопрос и решается.
А слово "локальный" не нужно воспринимать как "три машины", это может быть и целое предприятие
 

wizard

Новичок
ek-na
А ты пробовал сайт-то запустить потестить?
Что, сервак умирает?
Может и не нужно тебе это кеширование вовсе?
 

Фанат

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

короче.
твою задачу решает серверный кэш.
и я как-то не очень уловил аргументы против.
 

ek-na

Новичок
Ёпрст, вы еще за меня решаь будете, что мне нужно а что нет, такие умные все, особенно Фанат! Если не знаете ответа на вопрос или вы
>>>.... очень не любим заниматься глупостями, высосанными из чьего-то начальнического пальца (как нам это преподносят, а мы делаем вид, что верим).
то может и не стоит сюда писать, никто же не заставляет, а то превращаете форум в базар какой то.
Я задала вполне конкретный вопрос и жду вполне конкретный ответ: КАК это сделать, а ЗАЧЕМ - это не вам решать.
PS: простите, что вспылила, так что-то.....
 

McSimm

Новичок
страница напичкана запросами, которые меняются не так часто, а время на их выполнение тратится,
Кешируйте результаты запросов. Это на стороне сервера.
Кеш на стороне клиента позволяет сэкономить трафик, но если вы попытаетесь с помощью клиентского кэш решить описываемую вами проблему, скорее всего ничего не получится - вам все равно придется выполнять ваши запросы, чтобы проверять актуальность If-Modified-Since, зачастую более усложненные, чем в случае, когда вы не озабочены клиентским кешем. Это из личного опыта.

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

ek-na

Новичок
Автор оригинала: McSimm
....можно наряду с серверным кешем использовать и клиентский - механизм сессий предусматривает такую возможность.
Вот, об этом хотелось бы поподробней...
 

Фанат

oncle terrible
Команда форума
Ёпрст, вы еще за меня решаь будете, что мне нужно а что нет
совершенно верно.
ты же решила за нас, что мы должны всё бросить, и отвечать на вопросы, обоснованности которых не видим?

почему ты не хочешь задуматься - что такое сессия, и каков механизм её работы?

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

McSimm

Новичок
Быть мне битым :)

Вы напрасно вспылили, вас пытаются предостеречь от неправильного решения.

1. Определитесь, для чего у вас используется сессия. Если хоть какая-то персонификация вывода - все, сэкономьте время и выбросьте из головы клиентское кеширование. Если ваши странички должны хоть буквой отличаться в зависимости от сессии - вас в первую очередь и ваших пользователей ваш же кеш измучает до предела.
2. Если вы используете сесиию для каких-то других секретных целей, почитайте в документации про session_cache_limiter
 
Сверху