В PHP будет сессия быть созданным, если браузер не будет использоваться

У вас есть как минимум две проблемы:

  1. Вы никогда не сбрасываете flag на 1. Поэтому, как только найдется не простое число, все будет непростым. Вы хотите установить его обратно на 1 каждый раз, когда выполняете цикл во внешнем цикле.
  2. Вы безоговорочно вырываетесь из своего внутреннего цикла (j - это не что иное, как 2), поэтому вы на самом деле проверяете «странно», а не «простое». Только break, если вы подтвердили, что это не просто.

Исправьте это, и код работает:

#include
using namespace std;
int main() {
     int N;
     cin>>N;
     for(int i=2;i<=N;i++){
         int flag=1; // Set each loop
         for(int j=2;j

Попробуйте онлайн!

7
задан jW. 6 October 2008 в 21:42
поделиться

3 ответа

Сеансовые куки

Помните, что HTTP является не сохраняющим состояние, таким образом, сессии прослежены на Вашем сервере, но клиент должен отождествить себя с каждым запросом. Когда Вы объявляете session_start (), Ваш браузер обычно устанавливает cookie ("идентификатор Сессии PHP") и затем идентифицирует себя путем отправки значения cookie с каждым запросом. Когда сценарий назовут с помощью запроса со значением сессии, затем session_start (), функция попытается искать сессию. Для доказательства этого себе заметьте, что сессии умирают при очистке cookie.. многие умрут, как раз когда скоро, поскольку Вы выходите из браузера, если cookie является cookie "сессии" (временный). Вы упомянули именование сессии.. смотрите в своих cookie браузера и посмотрите, можно ли найти cookie с тем же именем.

Все это должно сказать, что cookie играют активную роль в Ваших сессиях, поэтому если клиент не поддерживает cookie, то Вы не можете сделать сессии путем, Вы в настоящее время делаете ее.. по крайней мере, не для тех альтернативных клиентов. Сессия будет создана на сервере; вопрос состоит в том, участвует ли клиент.

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

mysite.com?PHPSESSID=10alksdjfq9e

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

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

Заметка на полях: @Uberfuzzy делает правильное замечание - Используя сессии с завихрением, или wget на самом деле возможен. Проблема состоит в том, что это менее автоматически. Пользователь мог бы вывести значения заголовка в файл и использовать значения по будущим запросам. завихрение имеет некоторые "флаги" осведомленности cookie, которые позволяют Вам обрабатывать это более легко, но все еще необходимо явно сделать это. С другой стороны Вы могли использовать это в ваших интересах. Если завихрение доступно на Вашем альтернативном клиенте, то можно правдоподобно выполнить вызов сами, с помощью флагов осведомленности cookie. Обратитесь к вихревому руководству.

20
ответ дан 6 December 2019 в 07:30
поделиться

Если Вы назовете session_start (), то сессия будет создана, если клиент не будет в существующем. Если клиент не поддерживает (или настроен для игнорирования), cookie или querystring механизм раньше поддерживали сессию, новая сессия будет создана по каждому запросу.

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

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

2
ответ дан 6 December 2019 в 07:30
поделиться

Сессия PHP будет только создана, если браузер запросит страницу?

Короткий ответ: Да. Сессии были созданы конкретно для решения HTTP проблема не сохраняющая состояние путем усиления функций браузера. APC, memcached, DB, и т.д. не имеет значения. Это - просто методы устройства хранения данных для сессии и пострадает от той же проблемы.

Более длинный ответ: понятие сессий было создано для составления того, что HTTP является протоколом без сохранения информации о состоянии, и оказывается что состояние, довольно важное для большого разнообразия приложений.

Наиболее распространенный способ реализации сессий с cookie. PHP отправляет идентификатор сессии в cookie, и браузер отправляет cookie с идентификатором сессии назад. Этот идентификатор используется на сервере для нахождения безотносительно информации, которую Вы хранили на сессии. PHP имеет возможность включать и прочитать идентификатор сессии в конце URL, но это предполагает, что пользователи перейдут к страницам на Вашем сайте/приложении путем щелчка на ссылки, которые включают сгенерированный идентификатор сессии.

В Вашем конкретном случае возможно использовать cookie с завихрением (и возможно wget). Завихрение является веб-браузером, всего один без GUI. Если это - программа завихрения командной строки, Вы используете (в противоположность библиотеке C, расширению PHP, и т.д.) чтение на следующих опциях

-b/--cookie
-c/--cookie-jar
-j/--junk-session-cookies
2
ответ дан 6 December 2019 в 07:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: