Can't find mod_files.sh? Here it is:
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
#!/usr/bin/env bash
if [[ "$2" = "" ]] || [[ "$3" = "" ]]; then
echo "Usage: $0 BASE_DIRECTORY DEPTH BITS_PER_CHAR"
echo "BASE_DIRECTORY will be created if it doesn't exist"
echo "DEPTH must be an integer number >0"
echo "BITS_PER_CHAR(session.sid_bits_per_character) should be one of 4, 5, or 6."
# http://php.net/manual/en/session.configuration.php#ini.session.sid-bits-per-character
exit 1
fi
if [[ "$2" = "0" ]] && [[ ! "$4" = "recurse" ]]; then
echo "Can't create a directory tree with depth of 0, exiting."
fi
if [[ "$2" = "0" ]]; then
exit 0
fi
directory="$1"
depth="$2"
bitsperchar="$3"
hash_chars="0 1 2 3 4 5 6 7 8 9 a b c d e f"
if [[ "$bitsperchar" -ge "5" ]]; then
hash_chars="$hash_chars g h i j k l m n o p q r s t u v"
fi
if [[ "$bitsperchar" -ge "6" ]]; then
hash_chars="$hash_chars w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z - ,"
fi
while [[ -d $directory ]] && [[ $( ls $directory ) ]]; do
echo "Directory $directory is not empty! What would you like to do?"
options="\"Delete directory contents\" \"Choose another directory\" \"Quit\""
eval set $options
select opt in "$@"; do
if [[ $opt = "Delete directory contents" ]]; then
echo "Deleting $directory contents... "
rm -rf $directory/*
elif [[ $opt = "Choose another directory" ]]; then
echo "Which directory would you like to choose?"
read directory
elif [[ $opt = "Quit" ]]; then
exit 0
fi
break;
done
done
if [[ ! -d $directory ]]; then
mkdir -p $directory
fi
echo "Creating session path in $directory with a depth of $depth for session.sid_bits_per_character = $bitsperchar"
for i in $hash_chars; do
newpath="$directory/$i"
mkdir $newpath || exit 1
bash $0 $newpath `expr $depth - 1` $bitsperchar recurse
doneКонфигурација во време на извршување
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Конфигурација во време на извршување
Референца за `session.configuration.php` со подобрена типографија и навигација.
Конфигурација во време на извршување
Поведението на овие функции е под влијание на поставките во php.ini.
Каде може да се постави поставка за конфигурација.
Системот за управување со сесии поддржува голем број опции за конфигурација кои можете да ги поставите во вашиот php.ini датотека. Ќе дадеме краток преглед.
-
session.save_handlerstring -
session.save_handlerго дефинира името на ракувачот што се користи за складирање и преземање податоци поврзани со сесија. Стандардно еfiles. Имајте предвид дека поединечните екстензии може да регистрираат своиsave_handlerи; регистрираните ракувачи може да се добијат на основа по инсталација со реферирање на phpinfo(). Погледнете исто така session_set_save_handler(). -
session.save_pathstring -
session.save_pathго дефинира аргументот што се предава на ракувачот за зачувување. Ако го изберете стандардниот ракувач за датотеки, ова е патеката каде што се креираат датотеките. Погледнете исто така session_save_path().Постои опционален
Nаргумент на оваа директива што ја одредува бројот на нивоа на директориуми во кои ќе бидат распоредени вашите датотеки со сесии. На пример, поставување на'5;/tmp'може да заврши со креирање датотека со сесија и локација како/tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If. За да користитеNмора да ги креирате сите овие директориуми пред употреба. Постои мала скрипта во ext/session за да го направите ова, се вика mod_files.sh, со верзија за Windows наречена mod_files.bat. Исто така, имајте предвид дека акоNсе користи и е поголемо од 0, тогаш автоматското собирање на отпадоци нема да се изврши, видете копија од php.ini за понатамошни информации. Исто така, ако користитеN, бидете сигурни да го опкружитеsession.save_pathво "знаци на наводници" бидејќи разделувачот (;) се користи и за коментари во php.ini.Модулот за складирање датотеки создава датотеки со режим 600 стандардно. Овој стандард може да се промени со опционалниот
MODEаргумент:N;MODE;/pathwhereMODEе октална репрезентација на режимот. ПоставувањетоMODEне влијае на процесот umask.Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваАко ова е поставено на директориум што може да се чита од сите, како што е /tmp (стандардно), други корисници на серверот може да ги украдат сесиите со добивање на списокот со датотеки во таа директорија.
Безбедност: стандардниот сет на знациКога го користите опционалниот аргумент за ниво на директориум
N, како што е опишано погоре, имајте предвид дека користењето вредност поголема од 1 или 2 е несоодветно за повеќето локалитети поради големиот број потребни директориуми: на пример, вредност од 3 подразбира дека(2 ** session.sid_bits_per_character) ** 3директориуми постојат на датотечниот систем, што може да резултира со многу потрошен простор и иноди.Користете само
Nпоголемо од 2 ако сте апсолутно сигурни дека вашата локација е доволно голема за да го бара тоа. -
session.namestring -
session.nameго специфицира името на сесијата што се користи како име на колачето. Треба да содржи само алфанумерички знаци. Стандардно еPHPSESSID. Погледнете исто така session_name(). -
session.auto_startbool -
session.auto_startго специфицира дали модулот за сесии започнува сесија автоматски при стартување на барањето. Стандардно е0(оневозможено). -
session.serialize_handlerstring -
session.serialize_handlerго дефинира името на ракувачот што се користи за серијализација/десеријализација на податоци. PHP формат за серијализација (имеphp_serialize), внатрешни формати на PHP (имеphpandphp_binary", се поддржуваат PHP внатрешни формати (name",") и WDDX (name","). WDDX е достапен само ако PHP е компајлиран соwddxWDDX поддршка ги користи обичните serialize/unserialize функции внатрешно и нема ограничувања што.php_serializeги има. Постарите serialize ракувачи не можат да складираат нумерички индекс ниту стринг индекс што содржи специјални знаци (phpandphp_binaryза да се избегнат нумерички индекс или грешки со специјални знаци при гаснење на скриптата. Стандардно е|and!) in $_SESSION. Usephp_serializeво комбинација соphp. -
session.gc_probabilityint -
session.gc_probabilityсе користи за управување со веројатноста дека рутината за gc (garbage collection) ќе биде стартувана. Стандардно еsession.gc_divisor. Мора да биде поголемо или еднакво на1споено со0. Види session.gc_divisor интерполација на низи -
session.gc_divisorint -
session.gc_divisorја дефинира веројатноста дека gc (garbage collection) процесот ќе биде стартуван при секое иницијализирање на сесијата. Веројатноста се пресметува со користење на gc_probability/gc_divisor, на пр. 1/100 значи дека има 1% шанса GC процесот да стартува при секое барање.session.gc_probability. Мора да биде поголемо одsession.gc_divisorАко невалиден100ја специфицира бројот на секунди по кои податоците ќе се сметаат за 'ѓубре' и потенцијално ќе бидат исчистени. Чистењето на ѓубрето може да се случи при стартување на сесијата (во зависност од0. -
session.gc_maxlifetimeint -
session.gc_maxlifetime(24 минути). session.gc_probability and session.gc_divisorСтандардната директориум каде да се бараат динамички вчитувачки екстензии (освен ако не е променет од1440Ако различни скрипти имаат различни вредности наЗабелешка: но споделуваат исто место за складирање на податоците од сесијата, тогаш скриптата со минималната вредност ќе ги чисти податоците. Во овој случај, користете ја оваа директива заедно со
session.gc_maxlifetimeсодржи подниза што сакате да ја проверите за секој HTTP Referer. Ако Referer беше испратен од клиентот и поднизата не беше пронајдена, вградениот ID на сесијата ќе биде означен како невалиден. Стандардно е празен стринг. session.save_path. -
session.referer_checkstring -
session.referer_checkдава патека до надворешен ресурс (датотека) што ќе се користи како дополнителен извор на ентропија во процесот на креирање на ID на сесијата. Примери се -
session.entropy_filestring -
session.entropy_fileкои се достапни на многу Unix системи./dev/randomor/dev/urandomкои се достапни на многу Unix системи. Оваа функција е поддржана на Windows. Поставувањеsession.entropy_lengthна вредност различна од нула ќе предизвика PHP да ја користи Windows Random API како извор на ентропија.Забелешка: Отстрането во PHP 7.1.0.
session.entropy_fileАко невалиден/dev/urandomor/dev/arandomако е достапно. -
session.entropy_lengthint -
session.entropy_lengthго специфицира бројот на бајти што ќе се прочитаат од горенаведената датотека. Стандардно е32. Отстрането во PHP 7.1.0. -
session.use_strict_modebool -
session.use_strict_modeго специфицира дали модулот ќе користи режим на стриктен ID на сесијата. Ако овој режим е овозможен, модулот не прифаќа неиницијализирани ID на сесиите. Ако неиницијализиран ID на сесијата се испрати од прелистувачот, нов ID на сесијата се испраќа до прелистувачот. Апликациите се заштитени од фиксација на сесијата преку усвојување на сесијата со стриктен режим. Стандардно е0(оневозможено).Забелешка: Овозможување
session.use_strict_modeе задолжително за општа безбедност на сесиите. Се препорачува сите сајтови да го овозможат ова. Погледнете session_create_id() примерот со код за повеќе детали.Ги ескејпува специјалните знаци во стринг за употреба во SQL изјаваАко прилагоден ракувач на сесии регистриран преку session_set_save_handler() не имплементира SessionUpdateTimestampHandlerInterface::validateId(), ниту обезбедува
validate_sidcallback, соодветно, стриктниот режим на ID на сесијата е ефективно оневозможен, без оглед на вредноста на оваа директива. Особено забележете дека SessionHandler does not implement SessionHandler::validateId(). -
session.use_cookiesго специфицира дали модулот ќе користи колачиња за складирање на ID на сесијата на страната на клиентот. Стандардно е1(овозможено). -
session.use_only_cookiesго специфицира дали модулот ќе only користи колачиња за складирање на ID на сесијата на страната на клиентот. Овозможувањето на оваа поставка спречува напади што вклучуваат поминување на ID на сесиите во URL-и. Стандардно е1(овозможено). -
session.cookie_lifetimeго специфицира животниот век на колачето во секунди што се испраќа до прелистувачот. Вредноста 0 значи „додека прелистувачот не се затвори“. Стандардно е0. Погледнете исто така session_get_cookie_params() and session_set_cookie_params().Забелешка: Временската ознака за истекување се поставува релативно на времето на серверот, што не е нужно исто како времето во прелистувачот на клиентот.
-
session.cookie_pathВремето на истекување се поставува релативно на времето на серверот, кое не е нужно исто како времето во прелистувачот на клиентот./. Погледнете исто така session_get_cookie_params() and session_set_cookie_params(). -
session.cookie_domainја специфицира патеката што треба да се постави во колачето за сесија. Стандардно е session_get_cookie_params() and session_set_cookie_params(). -
session.cookie_secureја специфицира домената што треба да се постави во колачето за сесија. Стандардно е ништо, што значи името на хостот на серверот што го генерирал колачето според спецификацијата за колачиња. Погледнете исто такаonја специфицира дали колачињата треба да се испраќаат само преку безбедни врски. Со оваа опција поставена наoff, сесиите работат само со HTTPS врски. Ако еoff. Погледнете исто така session_get_cookie_params() and session_set_cookie_params(). - , тогаш сесиите работат и со HTTP и со HTTPS врски. Стандардно е
-
Го означува колачето како достапно само преку HTTP протоколот. Ова значи дека колачето нема да биде достапно за јазици за скриптирање, како што е JavaScript. Оваа поставка може ефективно да помогне во намалувањето на кражбата на идентитет преку XSS напади (иако не е поддржана од сите прелистувачи).
LaxandStrictИм овозможува на серверите да тврдат дека колачето не треба да се испраќа заедно со барањата меѓу локациите. Ова тврдење им овозможува на корисничките агенти да го намалат ризикот од истекување на информации меѓу локациите и обезбедува одредена заштита од напади за измама на барања меѓу локациите. Имајте предвид дека ова не е поддржано од сите прелистувачи. Празна вредност значи дека нема да се постави атрибут за колаче SameSite.Laxзначи дека колачето нема да се испраќа меѓу домени за POST барања;Strictќе го испрати колачето за GET барања меѓу домени, додека -
session.cache_limiterstring -
session.cache_limiterнема да.nocache,private,private_no_expire, илиpublic. Стандардно еnocache. Погледнете исто така session_cache_limiter() ја специфицира методата за контрола на кешот што се користи за страниците на сесијата. Може да биде една од следниве вредности: -
session.cache_expireint -
session.cache_expireдокументација за информации за тоа што значат овие вредности.180. Погледнете исто така session_cache_expire(). -
session.use_trans_sidbool -
session.use_trans_sidја специфицира времето на живот за кешираните страници на сесијата во минути, ова нема ефект за nocache limiter. Стандардно е0(оневозможено).Забелешка: дали е овозможено управувањето со сесиите базирано на URL или не. Стандардно е Since PHP 7.1.0, full URL path, e.g. https://php.net/, is handled by trans sid feature. Previous PHP handled relative URL path only. Rewrite target hosts are defined by session.trans_sid_hosts.
-
session.trans_sid_tagsУправувањето со сесиите базирано на URL има дополнителни безбедносни ризици во споредба со управувањето со сесиите базирано на колачиња. Корисниците може да испратат URL што содржи активен ID на сесијата до своите пријатели преку е-пошта или корисниците може да зачуваат URL што содржи ID на сесијата во своите обележувачи и да пристапуваат до вашата страница со истиот ID на сесијата секогаш, на пример.a=href,area=href,frame=src,input=src,form=formги специфицира кои HTML тагови се препишуваат за да се вклучи ID на сесијата кога е овозможено управувањето со сесиите базирано на URL. Стандардно е<input hidden="session_id" name="session_name">е специјален таг.Забелешка: Пред PHP 7.1.0, url_rewriter.tags се додава како променлива на формуларот.
fieldsetвеќе не се смета за специјален таг. -
session.trans_sid_hostsstring -
session.trans_sid_hostsвеќе не се смета за специјална ознака.$_SERVER['HTTP_HOST']специфицира кои домаќини се препишуваат за да го вклучат ID на сесијата кога е овозможена поддршката за транспарентно SID. Стандардно еphp.net,wiki.php.net,bugs.php.net -
session.sid_lengthint -
session.sid_lengthМоже да се наведат повеќе домаќини со ",", не е дозволен простор помеѓу домаќините. на пр. ви овозможува да ја наведете должината на низата со ID на сесијата. Должината на ID на сесијата може да биде помеѓу 22 и 256.СоветиСтандардно е 32. Ако ви треба компатибилност, може да наведете 32, 40 итн. Подолгиот ID на сесијата е потешко да се погоди. Се препорачуваат најмалку 32 знаци.
session.hash_functionБелешка за компатибилност: Користете 32 наместоsession.hash_bits_per_character=4,session.hash_function=0 (MD5) иsession.hash_bits_per_character=1 (SHA1) иsession.hash_functionБелешка за компатибилност: Користете 32 наместоsession.hash_bits_per_character=6. Користете 26 наместоsession.hash_functionБелешка за компатибилност: Користете 32 наместоsession.hash_bits_per_character=5. Користете 22 наместоsession.sid_bits_per_character=6. Мора да ги конфигурирате вредностите на INI за да имате најмалку 128 бита во ID на сесијата. Не заборавајте да поставите соодветна вредност заЗабелешка: , инаку ќе имате послаб ID на сесијата.
-
session.sid_bits_per_characterint -
session.sid_bits_per_characterОваа поставка е воведена во PHP 7.1.0. ви овозможува да го наведете бројот на битови во кодираниот знак на ID на сесијата. Можните вредности се '4' (0-9, a-f), '5' (0-9, a-v) и '6' (0-9, a-z, A-Z, "-", ",").Забелешка: , инаку ќе имате послаб ID на сесијата.
-
session.hash_functionmixed -
session.hash_functionСтандардно е 4. Повеќе битови резултираат со посилен ID на сесијата. 5 е препорачана вредност за повеќето средини.ви овозможува да го наведете алгоритмот за хеширање што се користи за генерирање на ID на сесиите. '0' значи MD5 (128 бита) и '1' значи SHA-1 (160 бита). Исто така е можно да се наведат кој било од алгоритмите обезбедени од екстензијата за хеширање
sha512orwhirlpool(ако е достапна), како што е hash_algos() function.Забелешка: Отстрането во PHP 7.1.0.
-
session.hash_bits_per_characterint -
session.hash_bits_per_characterви овозможува да дефинирате колку битови се складираат во секој знак при конвертирање на бинарните податоци на хешот во нешто читливо. Можните вредности се '4' (0-9, a-f), '5' (0-9, a-v) и '6' (0-9, a-z, A-Z, "-", ",").Забелешка: Отстрането во PHP 7.1.0.
-
session.upload_progress.enabledbool - ви овозможува да дефинирате колку битови се зачувани во секој знак при конвертирање на бинарните податоци на хашот во нешто читливо. Можните вредности се '4' (0-9, a-f), '5' (0-9, a-v), и '6' (0-9, a-z, A-Z, "-", ","). $_SESSION Овозможува следење на напредокот на поставувањето, пополнувајќи го
-
session.upload_progress.cleanupbool -
променливата. Стандардно е 1, овозможено.
Забелешка: Исчистете ги информациите за напредокот веднаш штом ќе се прочитаат сите POST податоци (т.е. поставувањето е завршено). Стандардно е 1, овозможено.
-
session.upload_progress.prefixstring -
Силно се препорачува оваа функција да остане овозможена. $_SESSIONПрефикс што се користи за клучот за напредок на поставувањето во
$_POST[ini_get("session.upload_progress.name")]. Овој клуч ќе биде споен со вредноста на за да обезбеди уникатен индекс. -
session.upload_progress.namestring -
Стандардно е "upload_progress_". $_SESSION Името на клучот што треба да се користи во
session.upload_progress.prefix.
Враќа
$_POST[ini_get("session.upload_progress.name")]зачувување на информациите за напредокот. Погледнете исто така не е предаден или достапен, напредокот на поставувањето нема да биде запишан. -
session.upload_progress.freqmixed - Стандардно е "PHP_SESSION_UPLOAD_PROGRESS". Дефинира колку често треба да се ажурираат информациите за напредокот на поставувањето. Ова може да се дефинира во бајти (т.е. "ажурирајте ги информациите за напредокот по секои 100 бајти"), или во проценти (т.е. "ажурирајте ги информациите за напредокот по примањето на секој 1% од целосната големина на датотеката").
-
session.upload_progress.min_freqint - Стандардно е "1%".
-
session.lazy_writebool -
session.lazy_writeМинималното одложување помеѓу ажурирањата, во секунди. Стандардно е "1" (една секунда).
Upload progress will not be registered unless session.upload_progress.enabled is enabled, and the $_POST[ini_get("session.upload_progress.name")] variable is set. See Напредок на поставувањето на сесијата , кога е поставено на 1, значи дека податоците од сесијата се препишуваат само ако се променат. Стандардно е 1, овозможено.
Белешки од корисници 11 белешки
On debian (based) systems, changing session.gc_maxlifetime at runtime has no real effect. Debian disables PHP's own garbage collector by setting session.gc_probability=0. Instead it has a cronjob running every 30 minutes (see /etc/cron.d/php5) that cleans up old sessions. This cronjob basically looks into your php.ini and uses the value of session.gc_maxlifetime there to decide which sessions to clean (see /usr/lib/php5/maxlifetime).
You can adjust the global value in your php.ini (usually /etc/php5/apache2/php.ini). Or you can change the session.save_path so debian's cronjob will not clean up your sessions anymore. Then you need to either do your own garbage collection with your own cronjob or enable PHP's garbage collection (php then needs sufficient privileges on the save_path).
Why does Debian not use PHP's garbarage collection?
For security reasons, they store session data in a place (/var/lib/php5) with very stringent permissions. With the sticky bit set, only root is allowed to rename or delete files there, so PHP itself cannot clean up old session data. See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=267720 .the pwd should be urlencode when it contanis special chars.
eg:
save_handler:redis
save_path: tcp://127.0.0.1:6739?auth=urlencode('xxxxx')To prevent mitm-attacks you want to make sure the session cookie is only transmitted over a secure channel prefix it with the magic string "__Secure-". [1]
Like :
<?php
session_start( [ 'name' => '__Secure-Session-ID' ] );
?>
The cookie will not be available on non-secure channel.
(Putting this note it here probably goes unnoticed because of all the noise)
[1]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#attributesPlease be careful with the 'sid_length' when setting 'sid_bits_per_character' to six.
Setting sid_bits_per_character to 6 includes the character "," to the list of possible characters. A comma will be escaped and transmitted as "%2C" (tested on Chromium Version 119.0.6045.199) adding two extra characters for each comma to the SESSION_ID.We found a session.save_path depth of 3 led to excessive wastage of inodes and in fact disk space in storing the directory tree. dir_indexes option on ext2/3/4 makes larger directories more feasible anyway, so we decided to move to a depth of 2 instead.
It took a little puzzling to figure out how to move the existing PHP sessions up one directory tree, but we ended up running this in the root sessions directory:
#!/bin/sh
for a in ./* ; do
cd ./$a
pwd
for b in ./* ; do
cd ./$b
pwd
# Move existing sessions out
find ./* -xdev -type f -print0 | xargs -0 mv -t .
# Remove subdirectories
find ./* -xdev -type d -print0 | xargs -0 rmdir
cd ..
done
cd ..
done
This script may not be the best way to do it, but it got the job done fast. You can modify it for different depths by adding or removing "for" loops.
The documentation gives a depth of 5 as an example, but five is right out. If you're going beyond 2, you're at the scale where you may want to to look at a large memcached or redis instance instead.I found out that if you need to set custom session settings, you only need to do it once when session starts. Then session maintains its settings, even if you use ini_set and change them, original session still will use it's original setting until it expires.
Just thought it might be useful to someone.max value for "session.gc_maxlifetime" is 65535. values bigger than this may cause php session stops working.Use SessionHandlerInterface interface Custom redis session, found the following:
Use ini_set ('session.save_path', "tcp: //127.0.0.1: 6379? Auth = password"); will be reported:
PHP Fatal error: session_start (): Failed to initialize storage module: user (path: tcp: //127.0.0.1: 6379? Auth = password);
Using session_save_path ("tcp: //127.0.0.1: 6379? Auth = password") will notsession.cache_limiter may be empty string to disable cache headers entirely.
Quote:
> Setting the cache limiter to '' will turn off automatic sending of cache headers entirely.
http://php.net/manual/en/function.session-cache-limiter.phpAfter having many problems with garbage collection not clearing my sessions I have resolved it through the following.
First I found this in the php.ini (not something i noticed as i use phpinfo(); to see my hosting ini).
; NOTE: If you are using the subdirectory option for storing session files
; (see session.save_path above), then garbage collection does *not*
; happen automatically. You will need to do your own garbage
; collection through a shell script, cron entry, or some other method. ; For example, the following script would is the equivalent of
; setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
; cd /path/to/sessions; find -cmin +24 | xargs rm
With this is mind there are options.
1. dont use a custom save_path.
** This means if your isp hasnt defaulted your session temp to something safer than install default or you are using a shared directory for session data then you would be wise to use named sessions to keep your session from being viewable in other people's scripts. Creating a unique_id name for this is the common method. **
2. use your custom folder but write a garbage collection script.
3. use a custom handler and a database