2013-05-28 5 views
2

Привет, можно ли использовать сеансы в cronjob?Использование сессии в Cronjob (Crontab)

Сценарий я использую:

session_start(); 

if(empty($_SESSION['startwert'])){$startwert = 0;} 
else {$startwert = $_SESSION['startwert'];} 

if(empty($_SESSION['zielwert'])){$zielwert = 10000;} 
else {$zielwert = $_SESSION['zielwert'];} 


.... 


$_SESSION['startwert'] = $zielwert; 
$_SESSION['zielwert'] = $zielwert + 10000; 
echo "Startwert: ".$_SESSION['startwert']."<br>"; 
echo "Zielwert: ".$_SESSION['zielwert']."<br>"; 

Но Крон ВСЕГДА начинают устанавливать «startwert» до 10000 и «zielwert» до 20000, и это не приводит к увеличению значения.


Хорошо, теперь я пробовал это.

/usr/bin/wget -O - http://mydomain.com/script.php 

Но cron начинает всегда с 10000 и 20000. Любые идеи?

+1

Сессии полагаются на файлы cookie, поэтому, чтобы заставить их работать для задания cron, вам понадобится вызванная задача, чтобы иметь возможность сохранять файлы cookie через вызовы. Для этого требуется использовать пользовательский агент HTTP, такой как 'curl' или' wget', чтобы вызывать файл PHP из cron, а не 'php -f ... 'или аналогичный. Измените вопрос, чтобы включить строку в ваш crontab, которая в настоящее время запускает задание, и я смогу ответить эквивалентом 'wget', который сохраняет файлы cookie и поэтому должен работать с сеансами. –

+0

Итак, только я должен настроить свой cron вот так? wget -q --spider mydomain.com/script.php – TrivoXx

+0

Почему вы не просто кэшируете данные сеанса в локальный файл, который можно прочитать/обновить при каждом выполнении? –

ответ

3

Если вы используете PHP-скрипт из cron через wget, используйте опцию --save-cookies; если через curl, используйте --cookie-jar. (Если вы вызываете на PHP скрипт через php -f [...] или подобное, то вам сначала нужно вызвать его через wget или curl вместо этого.)

Например:

wget --load-cookies /tmp/cron-session-cookies --save-cookies /tmp/cron-session-cookies --keep-session-cookies [...] 

или

curl -b --cookie-jar /tmp/cron-session-cookies [...] 

wget по умолчанию не сохраняет файлы cookie сеанса, которые вы хотите от него, следовательно, опция --keep-session-cookies; curl по умолчанию сохраняет их, поэтому все, что необходимо, это -b, чтобы разрешить куки-файлы и --cookie-jar сообщить curl, где их искать. В любом случае замените [...] любыми параметрами и аргументами, которые вы уже передаете программе, и настройте местоположение файла файла cookie для вкуса.

+1

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

+0

@MikeBrant Достаточно честный. Спасибо, что указали это. –

1

Не совсем. Сеансы PHP зависят от файлов cookie (игнорируя режим trans-sid), которые действительно существуют только в контексте HTTP. Задачи cron работают в режиме CLI, поэтому нет никакого http-уровня для решения.

Вы CAN заставить сценарий CLI использовать конкретный сеанс файл, установив идентификатор сеанса перед вызовом session_start();, но нет гарантии, что конкретный ID будет на самом деле существует, когда начинается работа хрон, а сессия мусора какой-нибудь другой PHP экземпляра сборщик, возможно, удалил его.

+0

У вас есть точка истечения срока действия сеанса, но не о куках в целом; 'wget' поддерживает, а IIRC' curl' также поддерживает, сохраняя куки-файлы через вызовы, передавая аргумент, указывающий на файл jar файла cookie. Предполагая, что рассматриваемый PHP-скрипт не обязательно должен быть вызван в режиме CLI, что, похоже, не относится к тому, что было опубликовано в вопросе, нет причин, по которым не может быть сделано использование куки-файлов и, таким образом, сеанс -aware. –

+0

Итак, я должен настроить мой cron вот так? wget -q --spider http://mydomain.com/script.php – TrivoXx

+0

да, но op ничего не говорит об использовании wget. Я предполагаю, что задание cron вызывает скрипт php напрямую, без слоя http. –

Смежные вопросы