Домой / Faq / Сессия подключения. Сессии в PHP. Отправка запроса клиента

Сессия подключения. Сессии в PHP. Отправка запроса клиента

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

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

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

Если включена только первая, то при старте сессии (при каждом вызове session_start() ) клиенту устанавливается кука. Браузер исправно при каждом следующем запросе эту куку возвращает и PHP имеет идентификатор сессии. Проблемы начинаются, если браузер куки не возвращает. В этом случае, не получая куки с идентификатором, PHP будет все время стартовать новую сессию, и механизм работать не будет.

Если включена только вторая, то кука не выставляется. А происходит то, ради чего, в основном, собственно, и стоит использовать встроенный механизм сессий. После того, как скрипт выполняет свою работу, и страница полностью сформирована, PHP просматривает ее всю и дописывает к каждой ссылке и к каждой форме передачу идентификатора сессии. Это выглядит примерно так:
Index превращается в
Index
а к формам добавляется скрытое поле

И браузер при клике на любую ссылку, или при нажатии на кнопку в форме, пошлет в запросе нужную нам переменную - идентификатор сессии!
По очевидным причинам идентификатор добавляется только к относительным ссылкам.

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

По умолчанию в последних версиях PHP включены обе опции. Как PHP поступает в этом случае? Кука выставляется всегда. А ссылки автодополняются только если РНР не обнаружил куку с идентификатором сессии. Когда пользователь в првый раз за этот сеанс заходит на сайт, ему ставится кука, и дополняются ссылки. При следующем запросе, если куки поддерживаются, PHP видит куку и перестает дополнять ссылки. Если куки не работают, то PHP продолжает исправно добавлять ид к ссылкам, и сессия не теряется.
Пользователи, у которых работают куки, увидят длинную ссылку с ид только один раз.

Фух. С передачей идентификатора закончили.
Теперь осталось привязать к нему файл с данными на стороне сервера.
PHP это сделает за нас. Достаточно просто написать
session_start();
$_SESSION["test"]="Hello world!";

И PHP запишет в файл, связанный с этой сессией, переменную test.
Здесь очень важное замечание.
Массив $_SESSION - особенный.
В нем, собственно, и находятся переменные, которые мы ходим сделать доступными в различных скриптах.
Чтобы поместить переменную в сессию, достаточно присвоить ее элементу массива $_SESSION.
Чтобы получить ее значение - достаточно обратиться к тому же элементу. Пример будет чуть ниже.

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

echo "Вы обновили эту страницу ".$_SESSION["counter"]++." раз. ";
echo "
обновить";
?>

Мы проверяем, есть ли у нас в сессии переменная counter, если нет, то создаем ее со значением 0, а дальше выводим ее значение и увеличиваем на единицу. Увеличенное значение запишется в сессию, и при следующем вызове скрипта переменная будет иметь значение 1, и так далее.
Все очень просто.

Для того, чтобы иметь доступ к переменным сессии на любых страницах сайта, надо написать ТОЛЬКО ОДНУ(!) строчку в самом начале КАЖДОГО файла, в котором нам нужны сессии:
session_start();
И далее обращаться к элементам массива $_SESSION. Например, проверка авторизации будет выглядеть примерно так:
session_start();
if ($_SESSION["authorized"]<>1) {
header("Location: /auth.php");
exit;
}

Удаление переменных из сессии.
Если у вас register_globals=off , то достаточно написать
unset($_SESSION["var"]);
Если же нет, то тогда рядом с ней надо написать
session_unregister("var");

Самыми распространенными ошибками, которые выдает РНР при попытке работать с сессиями, являются такие:
Две из них,
Warning: Cannot send session cookie - headers already sent
Warning: Cannot send session cache limiter - headers already sent

вызваны одной и той же причиной, решение описано в этом факе
Третья,
Warning: open(/tmp\sess_SID, O_RDWR) failed: No such file or directory (2) in full_script_path on line number (ранее она выглядела, как Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) ),
если перевести ее с английского, подробно объясняет проблему: недоступен указанный в php.ini путь к каталогу, в который пишутся файлы сессий. Эту ошибку исправить проще всего. Просто прописать каталог, который существует, и доступен на запись, например,
session.save_path = c:\windows\temp
И не забыть перезагрузить апач после этого.

Как выясняется, сообразительность людская не имеет пределов, и поэтому я вынужден пояснить:
сообщение о третьей ошибке (невозможно найти каталог) НЕИЗБЕЖНО приведет к появлению первых двух, поскольку сообщение об ошибке - это вывод в браузер и после него заголовками пользоваться нельзя. Поэтому не спешите искать преждевременный вывод, а сначала пропишите правильный путь!

Следующей по распространенности проблемой при работе с сессиями является тяжелое наследие register_globals. НЕ давайте переменным скрипта имена, совпадающие с индексами массива $_SESSION!
При register_globals=on значения будут перезаписывать друг друга, и вы запутаетесь.
А при register_globals=off появится другая ошибка: "Your script possibly relies on a session side-effect which existed until PHP 4.2.3.", в случае, если в скрипте есть переменная сессии не имеющая значения, и глобальная переменная с тем же именем. Чтобы от неё избавиться, надо всегда инициализировать переменные перед использованием (или хотя бы проверять на существование) и не давать глобальным переменным имена, совпадающие с индексами массива $_SESSION.

Если не работает, но и никаких сообщений не выводится, то добавьте в самое начало скрипта две строчки, отвечающие за вывод ВСЕХ ошибок на экран - вполне возможно, что ошибки есть, но вы их просто не видите.
ini_set("display_errors",1);
error_reporting(E_ALL);

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

Если вы уверены, что ошибок нет, но приведенный пример не работает все равно, то, возможно, в PHP не включена передача ид через урл, а куки по каким-то причинам не работают .
Смотрите, что у вас с куками.
Вообще, если у вас "не работают" сессии, то сначала попробуйте передать идентификатор сессии руками, то есть, сделать ссылку и приписать к ней идентификатор:
session_start();
if (!isset($_SESSION["counter"])) $_SESSION["counter"]=0;
echo "Вы обновили эту страницу ".$_SESSION["counter"]++." раз.

обновить";
?>

При этом следует убедиться, что не включена директива session.use_only_cookies , которая запрещает PHP принимать идентификатор сессии, если он был передан через URL

Если этот пример не заработает, то проблема либо в банальных опечатках (половина "проблем" с сессиями происходит от неправильно написанного имени переменной), либо в слишком старой версии PHP: поддержка сессий появилась в версии 4.0, а массив $_SESSION - в 4.1 (До этого использовался $HTTP_SESSION_VARS ).
Если же заработает - то проблема в куках. Отслеживайте - что за куку ставит сервер браузеру, возвращает ли браузер ее. Искать очень полезно, просматривая просматривая обмен HTTP-заголовками между браузером и сервером.
Объяснение принципа работы кук выходит за рамки этого и так уж слишком большого текста, но хотя бы убедитесь, что сервер куку с идентификатором посылает, а браузер - возвращает. И при этом идентификаторы совпадают друг с другом =)
Установка куки должна выглядеть, как
Set-Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6;
или как
Set-Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6; path=/
(если вы запрашиваете скрипт не из корневого каталога)
Ответ сервера должен выглядеть, как
Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6
либо
Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6; b=b
если браузер возвращает другие куки, кроме идентификатора сессии.

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

Если пример отсюда работает, а ваш собственный код - нет, то проблема, очевидно, не в сессиях, а в алгоритме. Ищите, где потеряли переменную, по шагам переносите пример отсюда, отлаживайте свой скрипт.

Еще одна проблема может возникнуть, если вы используете перенаправление через header или навигацию с помощью JavaScript.
Дело в том, что РНР автоматически дописывает идентификатор сессии только к ссылкам вида
, но не делает этого для header-ов, яваскрипта, мета-тегов.
Поэтому надо добавлять идентификатор руками, например, так:
header("Location: /script.php?".session_name()."=".session_id());

Так же, весьма редкая, и совершенно непонятно, откуда появляющаяся, проблема бывает в том, что настройка session.save_handler имеет значение, отличное от files. Если это не так - исправляйте.

Безопасность
Безопасность сессий - тема обширная. Поэтому остановлюсь на нескольких основных моментах.
Самый хрестоматийный - не передавать идентификатор через адресную строку. Об этом написано даже в php.ini, но это ограничивает функциональность сессий. Если вы решите последовать этому совету, то кроме session.use_trans_sid = 0 не забудьте session.use_only_cookies = 1
Желательно привязывать сессию к IP адресу: таким образом, если идентификатор будет украден, то злодей все равно не сможет им воспользоваться в большинстве случаев.
Рекомендуется пользоваться директивой session.save_path, с помощью которой задать собственный каталог для сохранения файлов сессий. Это более безопасно, чем когда они хранятся в общем временном каталоге сервера по умолчанию.

Дополнительная информация:

  • Кроме кук, механизм сессий посылает еще и заголовки, запрещающие кэширование страниц (тот самый cache limiter). Для html это правильно и необходимо. Но вот когда вы пытаетесь скриптом, проверяющим авторизацию, отдать файл, то интернет эксплорер отказывается его скачивать. Именно из-за этого заголовка. Вызов
    session_cache_limiter("private");
    перед стартом сессии должен решить проблему.
  • Как это ни кажется странным, но в массиве $_SESSION нельзя использовать числовые индексы - $_SESSION, $_SESSION["10"] - cессии работать не будут.
  • Где-то между версиями 4.2 и 5.0 невозможно было установить session.use_trans_sid с помощью ini_set() . Начиная с 5.0 уже можно снова.
  • До версии 4.3.3 куку PHP отправлял куку только если при старте сессии в запросе отсутстввал идентификатор. Теперь же кука посылается при каждом вызове session_start()

    Пример авторизации с помощью сессий
    Проиллюстрируем все вышенаписанное небольшим примером:
    создадим файл auth.php:
    if (isset($_POST [ "auth_name" ]))
    {
    $sql = "SELECT * FROM users WHERE name=?s" ;
    $row = $db -> getRow ($sql , $_POST [ "auth_name" ]);
    if ($row && password_verify ($_POST [ "auth_pass" ], $row [ "pass" ])) {
    $_SESSION [ "user_id" ] = $row [ "id" ];
    }
    header ("Location: http://" . $_SERVER [ "HTTP_HOST" ]. $_SERVER [ "REQUEST_URI" ]);
    exit;
    }

    if (isset($_GET [ "action" ]) AND $_GET [ "action" ]== "logout" ) {
    session_start ();
    session_destroy ();
    header ("Location: http://" . $_SERVER [ "HTTP_HOST" ]. "/" );
    exit;
    }

    if (!isset($_SESSION [ "user_id" ])) {
    ?>








    exit;
    }

    Теперь достаточно написать во всех защищаемых скриптах строчку
    require "auth.php";
    В данном примере предполагается, что сессия уже стартовала и соединение с БД создано, с использованием Класс для безопасной и удобной работы с MySQL . Также предполагается, что пароль хэширован с использованием рекомендованной функции password_hash .
    Пример защищаемого файла:

    session_start ();
    include "safemysql.class.php" ;
    $db = new safemysql ([ "db" => "test" ]);
    include "auth.php" ;
    ?>
    secret

    logout

    ОПС! Очень Полезные Ссылки:
    http://www.php.net/manual/ru/ref.session.php - самая последняя и свежая информация о поддержке сессий в PHP в официальной документации, плюс многочисленные комментарии пользователей. Настоятельно рекомендуется к прочтению.
    http://phpclub.ru/manrus/f/ref.session.html - ВЕСЬМА устаревший перевод этой главы на русский, из документации в переводе Александра Пирамидина.
    http://phpclub.ru/detail/article/sessions
    Статья с пафосным названием "Правда о сессиях". Двойственное впечатление оставляет. Вначале автор ОЧЕНЬ доступно рассказывает о механизме сессий, но методы, которые он предлагает к концу статьи - совершенно мутные.

    Хрестоматийная статья Дмитрия Бородина с сайта
    http://php.spb.ru/ настоятельно НЕ рекомендуется.
    Ребята, она страшно устарела. Мало того, что в ней есть фактические неточности, так с сессиями в PHP уже давно просто не работают.
    Огромное Диме спасибо за нее, это была первая статья по сессиям на русском языке, я сам по ней учился, но сейчас надо ее отправить на заслуженный отдых.
    Так же, устарели к сожалению, и многие другие статьи, лежащие в интернете и не обновлявшиеся годами.

  • Что такое сессия?

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

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

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

    Попробуем объяснить назначение сессии на следующих примерах.

    1. Когда вы открываете web-сайт, например, www.. Все произойдет буквально за минуту, поэтому вам не нужно беспокоиться о скорости вашего Интернет-соединения. Но почему же тогда необходимо так много сессий? На сайте размещена различная информация - много рисунков, видео. Для того, чтобы открыть страницу в браузере, нужно загрузить их во временную папку на вашем компьютере.

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

    Также происходит и при использовании другого программного обеспечения P2P , поскольку они работают по схожей схеме.

    Учтите, что нет четкой связи между скоростью и количеством сессий. При наличии большого количества сессий скорость не всегда будет высокой, так же, как и наличие высокой скорости не означает наличия большого числа сессий. Но, в основном, когда сессий много, скорость больше.

    Для чего устанавливать лимит сессий?

    1) Это позволяет избежать замедлений в работе сети, поскольку программное обеспечение P2P ограничено в количестве сессий.

    2) Это позволяет избежать поглощения ресурсов сети каким либо вирусом или другим видом сетевых атак, которым требуется большое количество сессий.

    Как настроить ограничение сессий на маршрутизаторе TP - LINK ?

    Шаг 1

    Откройте браузер и введите в адресную строку сетевой IP адрес маршрутизатора; по умолчанию это 192.168.1.1, затем нажмите Enter (Ввод).

    Шаг 2

    Введите имя пользователя и пароль для входа в web-интерфейс; по умолчанию и логин, и пароль admin .

    Шаг 3

    Нажмите Session Limit (Лимит сессий) -> Session Limit (Лимит сессий) в левой части страницы, активируйте функцию Session Limit (Лимит сессий), затем нажмите кнопку Save (Сохранить) для сохранения настроек.

    Шаг 4

    Нажмите Add New (Добавить), чтобы настроить правило ограничения сессий, введите сетевой IP адрес компьютера, для которого вы хотите установить ограничение, и установите максимальное количество сессий (Max Session).

    Примечание

    Max Session - это индивидуальный лимит для конкретного компьютера, даже если вы ввели массив сетевых адресов.

    Так как HTTP - это клиент-серверный протокол, HTTP сессия состоит из трёх фаз:

    1. Клиент устанавливает TCP соединения (или другое соединение, если не используется TCP транспорт).
    2. Клиент отправляет запрос и ждёт ответа.
    3. Сервер обрабатывает запрос и посылает ответ, в котором содержится код статуса и соответствующие данные.

    Начиная с версии HTTP/1.1, после третьей фазы соединение не закрывается, так как клиенту позволяется инициировать другой запрос. То есть, вторая и третья фазы могут повторяться.

    Установка соединения

    Так как HTTP это клиент-серверный протокол, соединение всегда устанавливается клиентом. Открыть соединение в HTTP - значит установить соединение через соответствующий транспорт, обычно TCP.

    В случае с TCP, в качестве порта HTTP сервера по умолчанию на компьютере используется порт 80, хотя другие также часто используются, например 8000 или 8080. URL загружаемой страницы содержит доменное имя и порт, который можно и не указывать если он соответствует порту по умолчанию.

    Имеем в виду: Клиент-серверная модель не позволяет серверу посылать данные клиенту без явного запроса этих данных. Чтобы обойти эту проблему, веб разработчики используют различные техники: периодически пингуют сервер используя XMLHTTPRequest Javascript объект, HTML WebSockets API , или похожие протоколы.

    Отправка запроса клиента

    Когда соединение установлено user-agent может послать запрос. (user-agent это обычно веб браузер, но может им не быть) Клиентский запрос это текстовые директивы, разделенные между собой при помощи CRLF (переноса строки). Сам запрос включает в себя три блока:

    1. Первые строки содержат метод запроса и его параметры:
      • путь к документу - абсолютная URL без указания протокола и доменного имени
      • версию HTTP протокола
    2. Каждая последующая строка представляет собой HTTP заголовок и передает серверу некоторую информацию о типах предпочитаемых данных (наприм. какой язык, какие MIME типы) или инструкции меняющие поведение сервера (наприм. не отправлять ответ, если он уже в кэше) . Эти HTTP заголовки формируют блок, который заканчивается пустой строкой.
    3. Последний блок является не обязательным и содержит дополнительные данные. По большей части используется методом POST.

    Примеры запросов

    Получаем главную страницу сайт, и говорим серверу, что user-agent предпочитает страницу на французском, если это возможно:

    GET / HTTP/1.1 Host: сайт Accept-Language: fr

    Обращаем внимание на пустую строку в конце, которая отделяет блок данных от блока заголовков. Так как в запросе отсутствует Content-Length: HTTP заголовок, блок с данными пуст и сервер может начать обработку запроса, как только получит пустую строку, означающую конец заголовков.

    Отправляем результат сабмита формы:

    POST /contact_form.php HTTP/1.1 Host: сайт Content-Length: 64 Content-Type: application/x-www-form-urlencoded name=Joe%20User&request=Send%20me%20one%20of%20your%20catalogue

    Методы запроса

    HTTP определяет набор методов запроса с указанием желаемого действие на ресурсе. Хотя они также могут быть и существительными, эти запросы методы иногда называют HTTP-командами. Наиболее распространенные запросы GET и POST:

    • GET используется для запроса содержимого указанного ресурса. Запрос с использованием GET должен только получать данные.
    • POST метод отправляет данные на сервер, так что он может изменять свое состояние. Этот метод часто используется для HTML форм .

    Структура ответа от сервера

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

    1. Первая строка - строка статуса, состоит из подтверждения используемой HTTP версии и статуса запроса (и его значения в виде, понятном человеку).
    2. Последующие строки представляют собой HTTP заголовки, дающие клиенту некоторую информацию о посылаемых данных (прим. тип, размер, алгоритм сжатия, подсказки по кэшированию). Так же как и в случае клиентского запроса, эти HTTP заголовки формируют блок, заканчивающийся пустой строкой.
    3. Последний блок содержит данные (если таковые имеются).

    Примеры ответов

    Успешное получение веб страницы:

    HTTP/1.1 200 OK Date: Sat, 09 Oct 2010 14:28:02 GMT Server: Apache Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT ETag: "51142bc1-7449-479b075b2891b" Accept-Ranges: bytes Content-Length: 29769 Content-Type: text/html (здесь идут 29769 байтов запрошенной веб-страницы)

    Сообщение о том, что запрашиваемый ресурс был перемещен:

    HTTP/1.1 301 Moved Permanently Server: Apache/2.2.3 (Red Hat) Content-Type: text/html; charset=iso-8859-1 Date: Sat, 09 Oct 2010 14:30:24 GMT Location: (это новый адрес запрошенного ресурса, ожидается, что клиент запросит его ) Keep-Alive: timeout=15, max=98 Accept-Ranges: bytes Via: Moz-Cache-zlb05 Connection: Keep-Alive X-Cache-Info: caching X-Cache-Info: caching Content-Length: 325 (Контент содержит стандартную страницу, которая будет показана, если клиент не может перейти по ссылке) 301 Moved Permanently

    Moved Permanently

    The document has moved here.


    Apache/2.2.3 (Red Hat) Server at сайт Port 80

    Сообщение о том, что запрашиваемый ресурс не существует:

      Text/html 19.10.2017 7:51:00 Vector BCO 0

      Есть 13-15 клиентов, которые сидят на терминальном сервере WS2012. Терминалка на виртуалке крутиться. На отдельной виртуалке DNS, AD и DHCP.

      Вопрос №1: как настроить лимит времени отключения при неактивной сессии?

      В gpedit.msc Конфигурация компьютера -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Ограничение сеансов по времени. Все параметры там - не заданы. А при этом при простое в районе 20-30 мин. всех выкидывает.

      В РУнете кучу инфы перерыл, ни где не нашел для WS2012, есть только для WS2003

      Вопрос №2: как сделать так, чтобы после отключения сессии все ПО открытое у пользователя - не закрывалось?

      Т.е. пользователя например должно выкидывать через 20 мин., при этом весь его сеанс убивается и когда он заново заходит все его открытые программы и доки - закрыты. По сути, когда будет ответ на вопрос №1 я настрою время, но все же хотелось бы чтобы пользователь заново все не открывал, после каждого выкидыша... Я понимаю, что это связанно с жизнью сессии, но все же, существует ли режим при котором сессия умирает, но состояние ее сохраняется? И если - да, то как его настроить?

      Вопрос №3: Можно ли в WS2012 ограничить права на выключение сервера?

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

      Модератор

      Text/html 19.10.2017 11:30:36 Avksentyev Sergey 1

      1 Так в свойствах коллекции есть закладка "Сеанс" Там и смотрите что Вам надо настраивать.. Или я что не понял?

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

      3 Если у Вас юзеры не админы, то.. в это кнопочке по-умолчанию только отключить и выйти..

    • Text/html 23.10.2017 10:51:31 Иван енд КО 0

      >>Как вы терминальный сервер настраивали? Если у вас настроена роль RDS , и до момента когда сессия будет полностью закрыта (со всеми программами пользователя в этой сессии).

      >>Если у вас настроена роль RDS

      Не знаю, где посмотреть?

      >>в конфигурации колекции есть время жизни сессии до момента отключения

      Не знаю, где посмотреть?

      >>У вас пользюки на сервере что администраторы?

      Да, админы.

      >>По умолчанию обычные пользователи не могут выключить сервер. Но вы можете в политике вообще скрыть эту кнопку.

    • Text/html 23.10.2017 11:00:12 Иван енд КО 0

      >>Так в свойствах коллекции есть закладка "Сеанс" Там и смотрите что Вам надо настраивать.. Или я что не понял?

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

      Вы написали в свойствах коллекции - это где?

      >>Смотря как пользователь закрывает сеанс.. Если отключить и настроить не закрывать отключенный сеанс, то буду оставаться открытые программы.. НО что то мне кажется это вообще очень не хорошая идея... Я вон тяжелые терминалки ребутаю ночью постоянно, чтобы как раз вся эта оставшая открытая фигня закрывалась.

      Я бы просто увеличил время жизни сеанса, для начала... Прекрасно понимаю, то о чем вы говорите, подвисшие сессии - не дело. Вот только знать бы где конкретно это все добро настраивается... ?

      У меня отсутствует опыт в настройке терминального сервера (ранее работал в нем только как клиент), хотя в ИТ структуре давно, но именно эту задачу не делал ни разу. И вопрос бы не стал тут писать, если б с мог найти в инете подробную инструкцию по исполнению...

    • Text/html 23.10.2017 11:13:30 Vector BCO 0

      >>Как вы терминальный сервер настраивали? Если у вас настроена роль RDS в конфигурации колекции есть время жизни сессии до момента отключения, и до момента когда сессия будет полностью закрыта (со всеми программами пользователя в этой сессии).

      Любимый но весьма странный, для меня, вопрос- как вы настраивали? Как мне думается из вопросов должно быть понятно, что настраивал не я. В противном случае очень тяжело объяснить то, что я настроил, а теперь не знаю как поменять... амнезия и т.п.

      Еще раз настраивал не я. А т.к. делал это не я, то навыков в этих настройках - явно не хватает. Вот я и задаю вопрос профессионалам: как это сделать, подскажите пожалуйста?

      >>Если у вас настроена роль RDS

      Не знаю, где посмотреть?

      >>в конфигурации колекции есть время жизни сессии до момента отключения

      Не знаю, где посмотреть?

      >>У вас пользюки на сервере что администраторы?

      Да, админы.

      >>По умолчанию обычные пользователи не могут выключить сервер. Но вы можете в политике вообще скрыть эту кнопку.

      Как убрать у пользователей админские права? Это настраиваться AD или в другом месте терминального сервера? Как сделать политику со скрытием кнопки power?

      Заранее благодарю за понимание и жду ответы...

      У Вас на сервере есть мега прогрессивный инструмент под названием "Server Manager " в нем добавляются\удаляются роли\фичи и там же они конфигурятся. Ознакомьтесь с функционалом этого инструмента. Слева в нем есть настройки некоторых ролей (установленных). Если там есть пункт RDS - вам в него, а далее в настройки коллекции. Погуглите как настраивается сервер терминалов на WS 2012 r2. Искать можно так Google -> "Terminal server 2012 r2 step by step guide".

      На сервере (и не только на сервере) так же есть мега инструмент который называется Computer Management (не путать с Server Manager) найти его можно жмакнув правой кнопкой мыхи по пуску.

      В Computer Management заходите в Local users and groups далее в группы, далее в администраторов, и смотрите кто там и зачем сидит. Выкидываете всех кому эти права не нужны. и перезагружаете сервер (убедитесь что вы у себя права не отобрали, бо будет потом квест их получить назад).

      Как скрыть кнопку Google -> "Hide shut down button GPO"

      The opinion expressed by me is not an official position of Microsoft

      Модератор

      Text/html 25.10.2017 7:51:20 Иван енд КО 0

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

      Вопрос гуглил и не однократно, писал же выше. Только я гуглил на русскоязычных ресурсах... Там толковых статей практически нет. Про английские источники сам видел, что есть, но навыки технического английского не на столько хорошие, чтобы на 100% правильно понимать большие статьи о настройках системы с нуля, которые ранее не делал ни когда.

      >>Искать можно так Google -> "Terminal server 2012 r2 step by step guide. Google -> "Hide shut down button GPO

      Гуглом пользоваться умею, в обучении пользования поисковиком - не нуждаюсь. Почему не искал на англоязычных источниках - написал выше... Если вам говорят что не знают как настраивать терминальный сервер, это еще не значит что человек гуглить не умеет. Но вы не упустили возможности как 99% айтишников начать с нравоучений и учения человека гуглить. Как по мне это всегда было и есть проблемой в понимании людей с ит-инфраструктурой. Хороший понт - дороже денег. И не один ИТ-шник этого не упускает, как показывает практика, даже в общении с коллегами, так сказать.

      Был задан вопрос - как настривать терминальный сервер? И подробно объяснено, что и где нужно настроить... а вы мне про гугл запросы пишете. Я у человека про математику спросил, а он начал о погоде... так получается. Вместо всего что вы писали выше, можно было бы коротко дать ответ на русском и точка. Да, вы мне скажете что гугление вопроса, решение которого нужно, это более связанные предметы. Да и это так, но если б вы читали внимательно первое сообщение, то ваш этот термин был бы не нужен.

      >>У Вас на сервере есть мега прогрессивный инструмент под названием "Server Manager".

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

      Ваш форму тут на русском, вопрос был на русском, и ответ хочется получить на русском.

      Без нравоучений - а что вы не гуглили? А есть такая козырная кнопочка гугл и пр.

      Гораздо ведь продуктивнее работать в стиле: вопрос - ответ.

      Вопрос: Как настроить тот-то? Ответ: заходите туда-то и делаете то-то.

    • Text/html 25.10.2017 8:25:04 Vector BCO 0

      На "вопрос - как настривать терминальный сервер " можно отвечать статьями на 10-15 страниц - это не формат форума. Я вам дал конкретные запросы в поисковик которые приведут вас к гарантированному результату. На русскоязычных ресурсах тоже много инфы, к примеру на хабре и подобных сайтах, если не нашли значит искать у вас таки получается плохо.

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

      The opinion expressed by me is not an official position of Microsoft

    Сессия (от лат. – sessio - заседание, англ. – session) – это промежуток времени, охватывающий работу пользователя в интернете с момента открытия первой и до последней ссылок. Рассчитывается как разница во времени между начальным и финальным запросами. Однако последняя страница может просматриваться пользователем различное время, из чего, следовательно, измерение времени между двумя запросами становится более затруднительным.

    Как связана сессия с протоколом HTTP и COOKIES

    Что такое сессия можно объяснить, отталкиваясь от протокола HTTP. Сам по себе, этот протокол не располагает способом сохранения состояния между двумя операциями. Т.е., проще говоря, открывая одну страничку, а затем, перейдя с неё на другую, HTTP не сможет установить, что оба запроса принадлежат одному пользователю. И тут на помощь приходит особый метод отслеживания – управление сеансами (нашими сессиями).
    Отсюда, отвечая на вопрос, что такое сессия, можно сказать, что это – вспомогательный логический объект, способствующий передачи данных между последовательными HTTP – запросами от одного юзера.
    Cookies, как и сессия, хранят сведения о пользователе во время его перемещения по разным страницам и улучшают работу протокола. Но в отличие от второй, где данные хранятся во временных файлах на сервере, они сохраняют их на компьютере пользователя в виде небольших фрагментов.

    Для чего нужны сессии

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

    Этапы сессии

    Всю сессию можно разделить на три этапа:

    • открытие сессии (когда пользователь начинает работу с определенным сайтом),
    • учет переменных сессии (при переходе на различные страницы),
    • завершение сессии.

    Из-за того, что данные сессии сохраняются на стороннем сервере, то лучше всего не держать большие объемы информации в них, а использовать cookies.