Перейти к содержимому

Sessionid что это

  • автор:

Sessionid что это

Google Analytics по умолчанию предоставляет только агрегированные данные. Для того, чтобы можно было получать исходные «сырые» данные, используется несколько способов: установка отправки SessionID + UserID для каждого события, передаваемого счетчиком Google, и стриминг данных в базу данных. SessionID используется для построения моделей атрибуции, а также для удобства обработки сырых данных.

Мы столкнулись с проблемой, в которой имеющий большое распространение код для формирования SessionID перестал удовлетворять нашим требованиям. Сделали свой.

Почему возникли сложности с передачей session id в нашем случае?

Инструкцию по передаче session id и код для настройки предлагает и Симо Ахава, признанный эксперт по Google Analytics и Tag Manager. Однако его недостаток заключается в том, что код создает при каждом действии новый SessionID, не объединяя их в реальные сессии. При дальнейшем создании правил и объединении данных на их основе такая логика может оказаться подходящей. Тем не менее, мы сочли это неудобным. Наша цель была в том, чтобы SessionID присваивался корректно.

Была предпринята попытка взять данные о SessionID из файлов cookies, которые формирует Google. Оказалось, что cookie, доступные для пользователей, отдают только номера установленных счетчиков и пикселей.
Fail!

Но мы нашли решение

Мы решили написать код SessionID, который будет работать так же, как и в Google Analytics. Сессия начинается в тот момент, когда пользователь заходит на сайт, и заканчивается либо когда он закрывает браузер, либо, когда проходит 30 минут с момента его последнего действия. Ограничение в 30 минут выставляется в самом коде, и его можно менять.

Подробнее о структуре кода

Код разделен на две части: readCookie и writeCookie. При первой его активации, когда происходит загрузка сайта, код пытается «считать» SessionID из cookie-файлов. Однако мы не можем получить доступ к куки Google. Поэтому проверяем наличие записи уже своей куки. Когда код не видит SessionID, он его создает.

Здесь начинается второй этап — writeCookie. SessionID создается кодом на основе правила, указанного в предыдущем разделе. При последующих активациях кода, когда происходят любые действия пользователя на сайте, процесс повторяется. В этом случае SessionID уже создан, а значит, код просто обновляет время действия, а не создает новую сессию.

Код и инструкция к нему лежат в публичной части нашего репозитория.

Пользуйтесь и вспоминайте нас добрым словом!

Как сервер идентифицирует пользователя с помощью session id?

Как сервер понимает, что все запросы от одного клиента? Условно говоря, сервер записывает себе в каком-то временном хранилище (оно действует только на время сессии), что такой-то session_id это такой-то user_id? Используется ли ip адрес для идентификации пользователя?

  • Вопрос задан более года назад
  • 602 просмотра

Комментировать
Решения вопроса 1

karabanov

Системный администратор

В cookie у пользователя вписан идентификатор сессии (фактически имя файла если сессии хранятся в файлах или имя ключа если сессии хранятся например в Redis или какой-то другой in-memory database).
Использовать ли IP для дополнительной идентификации или какой либо иное свойство клиента решает разработчик приложения.

Когда пользователь отправляет запрос на сервер, в заголовках запроса присутствуют и cookie с идентификатором сессии, так сервер и узнаёт кто прислал запрос.

session_id

session_id() используется для получения или установки идентификатора текущей сессии.

Константа SID также может быть использована для получения текущего имени и идентификатора сессии в виде строки, подходящей для добавления в URL-адреса. Смотрите также Работа с сессиями.

Список параметров

Если указан параметр id и он не равен null , то он заменит идентификатор текущий сессии. Для этого session_id() следует вызывать до session_start() . В зависимости от обработчика сессии, не все символы возможно использовать в идентификаторе сессии. Например, файловый обработчик сессии поддерживает только символы из диапазона a-z A-Z 0-9 , (запятая) и — (минус) !

Замечание: При использовании сессионных cookie, указание id для session_id() приводит к тому, что при вызове session_start() всегда будут отправлены новые cookie, независимо от того, совпадает ли идентификатор текущей сессии с вновь установленным.

Возвращаемые значения

session_id() возвращает идентификатор текущей сессии или пустую строку ( «» ), если нет текущей сессии (идентификатор текущей сессии не существует). В случае неудачи возвращает false .

Список изменений

Версия Описание
8.0.0 id теперь может быть null .

Смотрите также

  • session_regenerate_id() — Генерирует и обновляет идентификатор текущей сессии
  • session_start() — Стартует новую сессию, либо возобновляет существующую
  • session_set_save_handler() — Устанавливает пользовательские обработчики хранения сессии
  • session.save_handler

User Contributed Notes 21 notes

8 years ago

It may be good to note that PHP does not allow arbitrary session ids. The session id validation in PHP source is defined in ext/session/session.c in the function php_session_valid_key:

To put it short, a valid session id may consists of digits, letters A to Z (both upper and lower case), comma and dash. Described as a character class, it would be [-,a-zA-Z0-9]. A valid session id may have the length between 1 and 128 characters. To validate session ids, the easiest way to do it use a function like:

function session_valid_id ( $session_id )
return preg_match ( ‘/^[-,a-zA-Z0-9]$/’ , $session_id ) > 0 ;
>

?>

session_id() itself will happily accept invalid session ids, but if you try to start a session using an invalid id, you will get the following error:

Warning: session_start(): The session id is too long or contains illegal characters, valid characters are a-z, A-Z, 0-9 and ‘-,’

8 years ago

session_id() URL-decodes the session value. For example let’s say we use setcookie() to push a cookie down to a web browser. When the browser makes the next page request the browser sends the cookie back up to us with headers like this: Cookie: PHPSESSID=enGHumY%2C-2De-F-TDzNHVmE%2ChY5;

If we use session_id() to read the cookie it will output a value of this: enGHumY,-2De-F-TDzNHVmE,hY5

The two values don’t match! Use either setrawcookie() or URL encode if you wish to match the original value.

12 years ago

I was perplexed by inconsistent results with the session ID depending on whether I retrieve it using SID, COOKIE, or session_id(). I have found that session_id() is the most reliable method, whereas SID and COOKIE[«PHPSESSIONID»] are sometimes undefined.

I used this simple script to quickly test the problem on my servers:

$a = session_id ();
if(empty( $a )) session_start ();
echo «SID: » . SID . «
session_id(): » . session_id (). «
COOKIE: » . $_COOKIE [ «PHPSESSID» ];
?>

Regardless of browser I see the COOKIE undefined on the first load and the other two defined, then SID is empty on subsequent reloads and COOKIE is defined, but session_id() is always defined.

If I insert the session_regenerate_id() method that jeff_zamrzla gives below the refresh the page, I get a new session_id() but the COOKIE value is initially the prior session_id() until I hit refresh a second time. So again, session_id() proves to be the most reliable method.

It’s probably not a bug since I found the behaviour to be consistent in PHP versions 5.2.14, 5.3.3 and 5.3.4, but I can’t figure what I’m missing and hopefully this will help others who run into this.

7 years ago

When session.use_strict_mode is set to 1 or true, you cannot use session_id($sid) to set the session id for the current session.
ini_set ( ‘session.use_strict_mode’ , 1 );
$sid = md5 ( ‘wuxiancheng.cn’ );
session_id ( $sid );
session_start ();
var_dump ( session_id () === $sid ); // always false
?>

8 years ago

This can looks obvious, but as me, you can spend some hours to make a simple session work between different browsers and devices. These are the basics for me, but you can build upon.

if( $_GET ) //defining the session_id() before session_start() is the secret
session_id ( $_GET [ ‘session_id’ ]);
session_start ();
echo «Data: » . $_SESSION [ ‘theVar’ ];
//use your data before below commands
session_destroy ();
session_commit ();
>else //common session statement goes here
session_start ();
$session_id = session_id ();
$_SESSION [ ‘theVar’ ] = «theData» ;
echo «your.php?session_id keyword»>. $session_id ;
>
?>

8 years ago

IMPORTANT NOTE:
If you assign a specific session ID to a user in your applet, then do not run the following code either while logout,
session_regenerate_id(TRUE);
USE:
session_regenerate_id(); instead.
OTHERWISE, setting the session id will no longer works for that user.

19 years ago

Rewriting URL’s is not suggested for obvious security issues. Please be careful with register_globals when using sessions! Check that all information you recieve from a user is valid before accepting it!

12 years ago

If you look at the notes on cookies (set_cookie I think), you will see that you can not read a cookie on the page that it is set. That is because the cookies are sent with the page request which comes, of course, before your PHP is run. You have to wait until the next page request from the same source to read the cookie.

16 years ago

Regarding Colin’s comment, note that setting hash_bits_per_character to 5 results in characters ranging from 0-9 and a-v. Most attackers would be wise enough to realize what was going on when they saw a letter in g-v. The probability of not seeing a letter in g-v is somewhere around 2^-32.

13 years ago

I had a lot of trouble with session_regenerate_id() as it did not regenerate. Session_id() stayed the same no matter what (unless closing the window). I wanted to have different sid and empty vars for each session/page meeting a condition for security reasons. Finally, this worked:

$a = session_id ();
if ( $a == » ) session_start ();
if ( . add check if you want to regenerate and destroy vars on some condition only [ recommended :)]. )
< session_unset (); //destroys variables
session_destroy () //destroys session;
>

$a = session_id ();
if ( $a == » ) session_start ();
if (!isset( $_SESSION [ ‘safety’ ]))
session_regenerate_id ( true );
$_SESSION [ ‘safety’ ] = true ;
>
$_SESSION [ ‘sessionid’ ] = session_id ();
?>

Now you get different sid and session variables empty for each session_start if condition is met (i.e. user hits refresh on user/password form, which I needed badly :). Hope this helps someone out there.
Env: localhost
Note: condition is mandatory, otherwise it destroys on each load.

5 years ago

The call session_id(null) and session_id() provides not the same result. It is imperative to pass no parameters to get correct results.

17 years ago
Length of PHPSESSID appears to be 32 characters by default.
16 years ago

The higher you set session.hash_bits_per_character the shorter your session_id will become by using more bits per character. The possible values are 4, 5, or 6.

When using sha-1 for hashing (by setting ini_set(‘session.hash_function’, 1) the following session string lengths are produced by the three session.hash_bits_per_character settings:

4 — 40 character string
5 — 32 character string
6 — 27 character string

It would seem desirable to use sha-l with 5 bits_per_character because this will emulate a standard 32 character md5 string and make a would-be attacker think that is what you’re hashing with.

17 years ago

In response to simon at quo dot com dot au:

The PHPSESSID is produced using an hash function. By default, it uses MD5 which produces 128 bits long (i.e: 16 bytes long) hashes.
But, since some bytes’ values may not be used in the HTTP header, PHP outputs the hash in its hexadecimal representation, thus resulting in a 32 bytes long text.

Starting with PHP 5.0, you can change the hash function used (by setting «session.hash_function» to whatever function you want to use in php.ini).
You may for example set it to 1 to switch to SHA-1 which produces 160 bits (20 bytes) long hashes.

Please also note that another setting was introduced in PHP 5 (session.hash_bits_per_character) which sort of «compresses» the hash. Thus, resulting in what seems to be a shorter hash.
This feature helps you improve your application’s security by producing IDs that are harder to prodict for a malicious attacker.

12 years ago

Gosh, took a LOOONG time to figure this one out! If you have suhosin built into your PHP and can’t get sessions to work after changing the session id through session_id(), try turning off suhosin’s session encryption option in php.ini with:

18 years ago

Note that Firefox and Mozilla use the same process for launching new windows or tabs, they will pick up the same session id as the previous windows until the parent process dies or is closed. This may cause undesired results if the session id is stored in a db and checked, a solution is to check at the new entry point (new tab or window if the user went back to the index page) for an existing session. If a session id exists and a new one is required use something like:

$ses_id = session_id ();
$bsid_exists = false ;
$bsid_exists = check_session_id_from_db ( $ses_id );
if ( $bsid_exists ) <
//This is a reentry and the session already exists
// create a new session ID and start a new
session_regenerate_id ();
$ses_id = session_id ();
>
?>

18 years ago

About the note from Cybertinus :

The following test doesn’t work, the code following is always executed :

if(! session_id ())
<
// Always executed even if there’s already an opened session
>

session_id () returns an empty string if there is no current session , so to test if a session already exists , it ‘s better to write this :
if(session_id() == «»)
<
session_start();
>
else
<
// Anything you want
>
?>

15 years ago

The documentation for session_id is incomplete when it says:
«For example, the file session handler only allows characters in the range a-z, A-Z and 0-9!».

It is untrue when changing the default for the session.hash_bits_per_character as Colin said. session_id may therefore contain «-» and «,».

12 years ago

In php version 5.3.2 in my case each time a new session-id was generated after session_start() but all was working before correctly in previous versions. So I lost data from my current session (wrong session-id). There was always a $_POST or $_GET or $_COOKIE available with the session-name and session-id, so session_start() was taken this automatically. Now I have to execute session_id(..old id ..) before session_start() and a session is started for the same id.

20 years ago

you can also add the iframe tag:
ini_set(«url_rewriter.tags», «a=href,area=href,frame=src,iframe=src,input=src,form=fakeentry»);

9 years ago

Get a shared session.

Sometimes is good can interchange messages and vars between one session and another, but PHP dont support this. I create this script that allows with session_id() change from current session to shared session (this is, info with scope to all sessions) for read and write info and back in to user session. The code:

ini_set ( ‘display_errors’ , 1 );
error_reporting ( E_ALL );

function get_global ( $key ) //Get current session
if( session_status ()!= PHP_SESSION_ACTIVE ) session_start ();
$current_id = session_id ();
session_write_close ();
//Set a global session with session_id=1
session_id ( 1 );
session_start ();
//Get superglobal value
$value = null ;
if(isset( $_SESSION [ $key ])) $value = $_SESSION [ $key ];
session_write_close ();
//Set the before session
session_id ( $current_id );
session_start ();
return $value ;
>

function set_global ( $key , $value ) //Get current session
if( session_status ()!= PHP_SESSION_ACTIVE ) session_start ();
$current_id = session_id ();
session_write_close ();
//Set a global session with session_id=1
session_id ( 1 );
session_start ();
//Set superglobal value
$_SESSION [ $key ]= $value ;
session_write_close ();
//Set the before session
session_id ( $current_id );
session_start ();
>
//Example
//Begin my session normally
session_start ();
if(empty( $_SESSION [ ‘count’ ])) $_SESSION [ ‘count’ ]= 0 ;
$_SESSION [ ‘color’ ]= «rgb(» . rand ( 0 , 255 ). «,» . rand ( 0 , 255 ). «,» . rand ( 0 , 255 ). «)» ;
>
$_SESSION [ ‘count’ ]++;
$id = session_id ();
//Get the superglobal
$test = get_global ( «test» );
//Set the superglobal test with empty array if this dont set
if( $test == null ) $test =array();
//Get the superglobal
$test = get_global ( «test» );
//Set values for each reload page and save the session_id that create it
$test []= «Value: » . rand ( 0 , 100 ). » SessionID: $id
» ;
//Save the superglobal
set_global ( «test» , $test );
//Show the superglobal
foreach( $test as $t ) echo $t ;
>
echo «Reloads keyword»>. $_SESSION [ ‘count’ ]. «, This my color» ;

  • Функции для работы с сессиями
    • session_​abort
    • session_​cache_​expire
    • session_​cache_​limiter
    • session_​commit
    • session_​create_​id
    • session_​decode
    • session_​destroy
    • session_​encode
    • session_​gc
    • session_​get_​cookie_​params
    • session_​id
    • session_​module_​name
    • session_​name
    • session_​regenerate_​id
    • session_​register_​shutdown
    • session_​reset
    • session_​save_​path
    • session_​set_​cookie_​params
    • session_​set_​save_​handler
    • session_​start
    • session_​status
    • session_​unset
    • session_​write_​close
    • Copyright © 2001-2023 The PHP Group
    • My PHP.net
    • Contact
    • Other PHP.net sites
    • Privacy policy

    Что такое Идентификатор сессии (Session ID)

    Идентификатор сессии (Session ID): персональный номер, прибавляемый к URL, когда пользователь заходит на страницу при отключенных cookies, который является уникальным для каждого посетителя и присваивается адресу с целью сбора информации и статистических данных о поведении на сайте (сколько и какие страницы просмотрены, какие файлы загружены, какие запросы сделаны и т. д.).
    Каждому новому посетителю идентификатор присваивает уникальное число, которое добавляется к адресу сайта, что приводит к многократной индексации одних и тех же страниц. Поэтому рекомендуется не использовать идентификаторы сессий.

    Узнайте больше в нашем центре интернет-образования

    Практический курс «SEO-курс: от новичка до специалиста» Подробнее
    Практический курс «Копирайтинг: введение в профессию» Подробнее

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

    СОГЛАШЕНИЕ ОБ ИСПОЛЬЗОВАНИИ ФАЙЛОВ COOKIE

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

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

    ОБЩИЕ ПОЛОЖЕНИЯ

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

    Некоторые посещаемые Вами страницы могут также собирать информацию, используя пиксельные тэги и веб-маяки, представляющие собой электронные изображения, называемые одно-пиксельными (1×1) или пустыми GIF-изображениями.

    Файлы cookie могут размещаться на Вашем устройстве администрацией сайта (такие файлы называются «собственными»). Некоторые файлы cookie могут размещаться на Вашем устройстве другими операторами. Такие файлы cookie называются файлами «третьих лиц».

    Мы используем два вида файлов cookie на сайте: «cookie сессии» и «постоянные cookie». Cookie сессии — это временные файлы, которые остаются на устройстве пока Вы не покинете сайт. Постоянные cookie остаются на устройстве в течение длительного времени или пока Вы вручную не удалите их (как долго cookie останется на вашем устройстве будет зависеть от продолжительности или «времени жизни» конкретного файла и настройки Вашего браузера).

    ИСПОЛЬЗУЕМЫЕ ФАЙЛЫ COOKIE

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

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

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

    Рекламные файлы cookie определяют, какие сайты Вы посещали и как часто, какие ссылки Вы выбирали, что позволяет показывать Вам рекламные объявления, которые заинтересуют именно Вас.

    Сторонние веб-сервисы. Иногда на данном сайте мы используем сторонние веб-сервисы. Например, для отображения тех или иных элементов (изображения, видео, презентации и т. п.), организации опросов и т.п.

    УПРАВЛЕНИЕ ФАЙЛАМИ COOKIE

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

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

    ВНЕСЕНИЕ ИЗМЕНЕНИЙ В СОГЛАШЕНИЕ ОБ ИСПОЛЬЗОВАНИИ ФАЙЛОВ COOKIE

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *