10. Session进阶

龴龳龱龭龩龥龣龢 龡龞龛Drupal8龉龇龅龂龩Session龱齰齭 齪齨齦齤龅齢齢齡齞齚drupal8齕齒齏齌齈齅Symfony齏Session鼽鼻

鼹鼷drupal鼳鼰鼯鼫鼨鼥鼤齌齈鼡鼟龳鼜鼘齏鼗鼓齪龳鼜鼘鼟鼒鼐鼌齪鼈齡鼇drupal8齏鼃齤Session黿黽

黺黸黷黴鼌齪黲黱鼐

黰鼷drupal8齏Session黯龇黬齚Symfony齏Session鼽鼻黩齪鼃齤黨黦龴齚齅 \core\lib\Drupal\Core\Session

龴鼥鼤默鼻黖黓黒齢齢黐黦齚Session齏黍黋黯龇齪黈黐黦齚黄鼨黁麽黁麹黰齏麸麴黯龇齪麳麲麱麭麩黄Session麦黰麤

drupal8龱齰齏Session麡龱齰鼟麞麚麗麓麏麎麌麊齞黺麉麇麆麅齏麃麂

鼥鼤麀鹾鼟龴 Drupal\Core\StackMiddleware\Session 黓鹰鹬齏齪鹩鼡鼟http鹦鹣麅齏 http_middleware.session

鹙鹖黺鹕龳龱龭龥鹑齏 龡龞龛Drupal8龉龇龅龂龩HttpKernel鹦鹣齭

麸鹉鹆鼥黓鹅麓齅 $this->Container->get("session"); 鸨鸦鸥龉黯龇麲齅 $session = $this->container->get($this->sessionServiceName);

鸕鸒鸐黷麸黷session鸎鸊齏鸈鸆齅

鼫鼨齚鸂齅 Symfony\Component\HttpFoundation\Session\Session 麦鷺鼤鷶鷲齅

鸎鸊齅 session_manager

鷮鷭鷪齅 Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag

鷤黐鷪齅 Symfony\Component\HttpFoundation\Session\Flash\FlashBag

鸨黈黒黿鷠鷝麞黷鷚鷖麚鼓鷔齏鼓鷔鸈鸆鷲鷑鷎麂黺鹕龳龱龭龥默齏鸎鸊鼓鷔鼜鼘鷌鷈齤龅鸙

鷇鹕齌龳鼫鼨齚Symfony齏Session鼽鼻齪齨黒鷅齏鼟鼫鼨齚黒鷅齏SessionStorage 鷄黐鷁鷀鷔

Session鶽鷀齏黍黋鼡鼟鼥鼤鷄黐鷁鷀鷔齪鶼鼡鼟龳鼜鼘齏鶸鶶齪龴drupal8齏龉黯龇麅鹾鶲麌鶯齞鼫鼨SessionStorage

鼥鼤鶫鶩黒鼟鶦鶣鶡齪鹆鶼齏鶞鶝鸐黷齪鶚鶙SessionManager鶖麲鶒鶎

麳鶌龴drupal8麅鸥鶊SessionStorageInterface鶂鵿齏SessionStorage鵾鵻鶫麲齚SessionManager

SessionManager黱鵸鵶Symfony齏NativeSessionStorage齪

鵴鵰黺鵯鵭SessionManager鼡鼟Symfony鵬鵩麅齏SessionStorage齪鵧默鼈鵤麲齕齒鷁鷀鷔麤

龴齕齒龱齰麅麦鷺鼤齤龅齅鷲鷑鶽鷀鷔鸨鷄黐鷲鷑鷪鸙鵣齕齒鷁鷀鷔鸨鵠鵟鵝齤龅鶞鶝鸙鵣齕齒鶽鷀鷔鸨鵠鵟齕齒齏鵙鹝鵕龣鸙

SessionManager鼳鼰黐鷄鷲鷑鼡黷鶼黓鹑麌麊齏SessionHandler齪鼥鼤齕齒鶽鷀鷔鼡鼟Drupal\Core\Session\SessionHandler

鼥鼤SessionHandler麎黒鵔鶂鵓鵏鵎SessionManager

鵋鼟鵉龢鹝鹝鷪鵆齪鵅麸鹝鷪鵆鵃鵀麸鼤鴼黩鶞鶝齪鷪鵆鹖鴸鷝鵧齅

SessionHandler齅鴷黓鹝齏鴵麓齏齕齒鶽鷀鷔

Symfony\Component\HttpFoundation\Session\Storage\Handler\WriteCheckSessionHandler : 鴯麸鹝鷪鵆齪鵃鵀鷭鶝黴齏鴬麏齪鷝鴩鷲鷑鴨鴥鴡鴞黲鴛龣鴗鹾

Drupal\Core\Session\WriteSafeSessionHandler :鴯鴕鴛鷪鵆齪鵃鵀鴓鴒鼟鴎鷇龣齏鶝鴋

鷝鴩龴鴇鴄麅鼫鼨齅 \Drupal::service('session_handler.write_safe')->setSessionWritable(false); 鼈鳿鳽齕齒鳼鳹鳵黐

鴷鳳鳰鳮鵉龢鳫鴛鷪鵆齏齕齒鶽鷀鷔鵓鵎SessionManager齪龴鸎鸊鸈鸆yaml默鼻黓鹑黷黒鳨鼥鳦鷪鵆黰龱

鸦鸥鼥鼤鷪鵆黰龱鼟龴鼓鷔鳣鳠黓鹑鳞鶊齏齪鳣鳠鷔鳛鼷齅

Drupal\Core\DependencyInjection\Compiler\StackedSessionHandlerPass

鸕鸒黷麸黷SessionHandler齪鶼鳖鸈鳓drupal齕齒鷲鷑鼳鼰鷄黐鵕龣齪

黷黯龇鷇鵰黿鷠drupal8齏Session鷲鷑麎黒鼟鳑鴵鳎php齦鳌黐龴默鼻龱齰麅齪

鵋鼟黦龴齚 鷲鷑鳉 黓鹑齪鷲鷑鳈鶫麲齅sessions齪鷅麚鷄黐齏黈麦sessions麇鳅齏鼨黁id鵣龛黁鳂鼜鳀ip鵣麚鲽鲼鵣齕齒鲺鲶id

齕齒鲲鷲鷑MetadataBag齅

MetadataBag 鼨鼷黐黦齕齒龳鲮齏鷮鷭齪drupal齏 MetadataBag 黱鵸齚 symfonyd MetadataBag 齪麲鲪鼰鲨黱鵸麂麳麲鶼鲦鲣齚麇鲡鲞黺麉鲚鲖CSRF齏鲏鲋

MetadataBag 黓鹑黐黦齚鲈鲅CSRF齏鴕鴛鲃鲂鳦麡齪鵤麲 CsrfTokenSeed 齪麲鲪鼰鲨鼥鼤鳦麡黺鱿鱾CSRF鱼

鶊龴鸕鸒黿鷠齚drupal8齕齒鷲鷑齏黐黦齪鶌黩齕齒鷁鷀鷔鼨齞齚SessionConfiguration齪鼥鱸鱶鱲鱱黒麩齡鼇麤

drupal8齕齒鼒鱯鱬鱨鱥鷭齅

drupal8鱣鱢齕齒鼒鱯鱬鱨鶞鶝齪鼥鼤鼟drupal麲齚鵃鱠鷭鶝鴼黩鱟鲣齏齪龴Symfony麅麎鱛麦

鷝鴩龴黺麉麅鱛麦鱚鶊齕齒id齦鼰黒齕鱬鱨齕齒齪鼥鼤鱗鱖鱓鶫鱐黐鱚鱏鹾鼨齪鱓鶫鱐黐龱齰鷝鴩龴黺麉麅鱚鶊齕齒id鱋鵾鱇麲黒鼟鱓鶫齏齪鼈黒麀鹾

齦鸕鸒鱄鲨鱀鸥齏鱬鱨鼳鼰鰾麂鱛麦黰龱齪鸕鸒鸦鸥鱛麦鰼鲨鼥鳌鶙齪齕齒麇麆齕龴鱛麦鱬鱨齏鹖鴸鵧齕鰸鰶$_SESSION

鵴鵰鸕鸒鷇鵰鰯鰫鼫鼨齕齒麇麆齪鵋黒齕鰪鰧齞鱛麦鱀鰥鱬鱨齪鷝鴩麦齕齒鷲鷑鰣鳎齦鼰齕齒麇麆龴鳵黐齏麚鰡齕鱀鰥鱬鱨齕齒鼯鳵黐鷲鷑

鸦鴵鷀鷇鵰鼫鼨鰝鰙鼗鼓鰘齏黯龇鰖鰕齅

龴php麅鳈鰕齕齒鰒鰑麦鷺鼤鰫鰐齅

PHP_SESSION_DISABLED 齕齒鶞鶝鵾鰌鼨麤
PHP_SESSION_NONE 齕齒鶞鶝鷇鼨齪齨黒黐龴鰉龥齕齒鸨鱛麦鱬鼨鸙麤
PHP_SESSION_ACTIVE 齕齒鶞鶝鷇鼨齪鵋鰃黐龴鰉龥齕齒鸨鰂鵉鱬鼨鸙麤

鵧鹑鸕鸒鸐黷麸黷 \core\lib\Drupal\Core\Session 默鼻黖黓鹑黄齕齒麹黰齏鸦鯿黯龇齅

AccountInterface 齅麽黁鶂鵿齪鵃鵀齌龳齏麽黁鯽鯻鶂鵿

UserSession 齅鯴鱇齏麽黁鶂鵿鸥鶊

AnonymousUserSession 齅鱓鶫麽黁鶂鵿

AccountProxyInterface 齅麽黁黯鷀鶂鵿齪鸦鸥鼡鼟麸鼤麽黁麇麆齏鷪鵆齪麲鲪鼰鲨鯰鯬鯿麂麳麲鷇鵰鶙麽黁鹉鯫

AccountProxy 齅麽黁黯鷀鶂鵿齏鯴鱇鸥鶊

AccountSwitcherInterface 齅麽黁鹉鯫鶂鵿

AccountSwitcher 齅麽黁鹉鯫鶂鵿齏鯴鱇鸥鶊

PermissionsHashGeneratorInterface 齅鲂鯧鲺鲶鰣鳎鷔鶂鵿

PermissionsHashGenerator 齅鲂鯧鲺鲶鰣鳎鷔

鵰黴鼡鼟drupal8齏齌龳session鼃鯥齚麤

<?php  
echo isset($_SESSION)?"isStart":"noStart"; // 并未调用session_start()显示未开始  
function yunke()  
{  
    $_SESSION=array();//变量名$_SESSION具有特殊性,可用超全局,如果圆通$_YUNKE就不行  
}  
yunke();  
echo isset($_SESSION)?"isStart":"noStart"; //超全局会话对象存在了,虽然有$_SESSION超全局变量存在,但会话并没有真正启动,并未调用session_start()  
echo session_status (); //返回PHP_SESSION_NONE  

额外信息

1齅龴鲞鶶鯞鯜默鼻黓鹑鷇鵰鯰鯜齕齒齏鯙鯗鶖鯔鯐鯍齪鹩鼡鼟麩鯉麚鲽鱄鲨鶖鯔麸鴛齕齒鷲鷑齏鴷鳳鯙鯗麚鲽

鼥鼤齒麦鶶鯆齪鸦鸥鼡鼟龴齕齒齏鲲鷲鷑鷪黓鹑鵯鯅齚齕齒齏鴷鳳鼫鼨麚鲽齪龉黯龇齅$this->meta[self::UPDATED]齪鼥鼤麚鲽鳵黐龴$_SESSION黓

鹅鱬齕齒齏鼨黁鷇鶝鮾鼐鮺鹅麩鼤鮷鹑齪鵅鼤鮷鹑黨齕鯙鯗齕齒齪鵋齕齒鷲鷑鮶鱛麦鴥麏齪鳼鴥麏鼟黒齕鶸龣齕齒齏

齦鼰鵅鴛黨鼯鵯鯅麸鵧鯙鯗麚鲽齪鼡鳿鳽齕齒$_SESSION鮲鴥齪鱄鲨鷲鷑鳉鮾鶂鶸龣齕齒鷲鷑齪鼥鳌鮱麦麴鮯鮫鷭鶝

齦鼰鼡鯰鸈麸鼤鯐鯍齪鮧龢鼥鼤鯐鯍麚鲽鳰鵯鯅麸鴛齪鼥鳌鼡麦鱸鱶鮦齏鷭鶝齪龴齕齒鳼鮲鴥齏鹖鴸鵧黒鼨鵅鴛黨鶸龣鷲鷑

鮤鮢鷝鵧齅

$settings['session_write_interval'] =鮠鷲鮝鯴鱇麲180鮠齪

2齅鯴鱇齏齕齒鷄黐鮕鮔鼟齅

gc_probability : 1 鮒鵧麸鮔鶒鼨
gc_divisor : 100 鮒黴鹑齏鮕鮔麸鮑鳖鸈齕齒鹅麓麚鱬鱨鮏鮎鮍鮉鮇鮃齏鵬鮂
gc_maxlifetime : 200000 魿鵻鮧龢魻鯍齏齕齒齕鵾魹黬齪龴齕齒鶽鷀鷔麅齏gc($lifetime)鼡鼟鼨齏魻鯍齪鮧魸齕龴鷲鷑鳉麅魴黬

cookie_lifetime : 2000000 鵰鮠鷲魲鸈齚鱚魰齞魭魬鷔齏 cookie 齏鳎鵻魨魸麤鯍麲 0 鳈鰕魧鵔齞黰魣魭魬鷔魢麤鯴鱇麲 0

鼥鼤鯴鱇鯍鷇鵰龴 /sites/default/services.yml 麅魝鮲齪鸨麇鳅齞鵶魚齏鲞鶶魗鯅齪鷝鴩鱛麦 services.yml 默鼻黺魔鴒麸魐 default.services.yml 魝鮲麲 services.yml 鸙

黰鼷鶖麩齕齒鮕鮔黺魎黷魊魇魅魁齅 http://php.net/manual/zh/session.configuration.php

3:鷝鴩鬶鵔鶂鹆鷲鷑鳉鵧鬴齕齒鷲鷑齪鼫鼨unserialize魇鳹齕鰣鳎鬳鬱齪鼥鼟鬮鼷齕齒鷲鷑齏鬭龭麏黒鷅鼷serialize魇鳹齪鷇鬮 session.serialize_handler 魲鸈

鷝鴩鬶鬪鮦鬦鬣黷麸黷鷲鷑鳉黓鹑鳵黐齏齕齒鷲鷑黺鼨鰝鰙鼗鼓鰘齏魇鳹鬢鬭龭麏齅

4齅鷝麞鼫鼨drupal8鵶魚齏齕齒麇麆齅

麦鼓鷔麚齅 $this->container->get("session");

麦黺麉麇麆麚齅 $request->getSession();

鼃鬛鼫鼨齅 \Drupal::service('session');

5齅drupal齏齕齒龱齰黄鴯鷺魇鼟黒鬗鼓齏齪鹩鼡鼟鬖鷝鴩鴯鷺魇鮃鬭鰂鵉鹅鱬齕齒齪齦鼰鼫鼨drupal齕齒鼈鬓鬳齪黺鵯鵭鰼鱄鬮drupal鸐鹅鱬齕齒

鹩黄php.ini 麅齏鵶鱨鹅麓魲鬐 session.auto_start = 1 黒鬗鼓齪魻魲鬐鰼鬏鯰鯜麲0黰魣

drupal齏齕齒鷲鷑鼟黦鷲鷑鳉齏齪鴯鷺魇鮃鬭鷇鶝黒鶝齪鵋php鬋鶝麌魁麸鼤 SessionHandler 鳵黐鶽鷀鷔齪鼥鼟黒鬗鼓齏鬉龉

鼥鳌齏黒鬗鼓鷭龴Symfony麅麦鬆鬂齪鵎鳨齚髿鳖鰾鳹齪黺黷齅 http://symfony.com/doc/current/components/http_foundation/session_php_b…

session_start();  
session_decode(file_get_contents("sessions-session.bin"));  
print_r($_SESSION); 

本书共71小节:

评论 (写第一个评论)