HTML, Excel, Word, SEOPHP êóðñ äëÿ ÷àéíèêîâ ⇒ Ñåññèè

PHP äëÿ "÷àéíèêîâ"

Èíñòðóìåíòû
Âûáèðàåì IDE
Âûáèðàåì Web-ñåðâåð
Âûáèðàåì ÑÓÁÄ
Ñòðóêòóðà ÿçûêà PHP
Ïåðâûé øàã
Ñèíòàêñèñ
Òèïû äàííûõ
Ïåðåìåííûå è êîíñòàíòû
Îïåðàòîðû
Âûðàæåíèÿ
Óïðàâëÿþùèå ñòðóêòóðû
Ôóíêöèè
Êëàññû
Èñêëþ÷åíèÿ
Îøèáêè
Ìàññèâû
Ãëîáàëüíûå ìàññèâû
Cookies
Ñåññèè
Çàãðóçêà ôàéëîâ
Ðàáîòà ñ ôàéëàìè
Ðàáîòà ñ ôàéëàìè íà äèñêå
Ðàáîòà ñ äàííûìè â ôàéëå
Ïðèìåð óïðàâëåíèÿ ôàéëàìè
Ðàáîòà ñ áàçàìè äàííûõ
Ïîäêëþ÷åíèå
Àíàëèç ðåçóëüòàòîâ
Âûïîëíåíèå çàïðîñîâ
Îòêëþ÷åíèå
Ïðèìåð: îòñëåæèâàíèå ïîëüçîâàòåëåé
Ðàáîòà â ñåòè
Îòïðàâêà ïî÷òû
Áåçîïàñíîñòü
HTTP-àóòåíòèôèêàöèÿ
Çàùèòà ëîãèíîì è ïàðîëåì
Àâòîìàòèçàöèÿ
Ðåãóëÿðíûå âûðàæåíèÿ â PHP
Èíòåãðàöèÿ
PHP è JavaScript

 

Ñåññèè


Àâòîð: Àðòåìüåâ Ñåðãåé Èãîðåâè÷
ICQ: 438856621
email: _spin_@bk.ru

Îäíîé èç îñîáåííîñòåé ïðîòîêîëà HTTP ÿâëÿåòñÿ "îòñóòñòâèå ïàìÿòè". Ýòî îçíà÷àåò, ÷òî ñåðâåð "çàáûâàåò" ïîëüçîâàòåëÿ ñðàçó æå ïîñëå îêîí÷àíèÿ HTTP-ñåññèè (çàãðóçêè ñòðàíèöû). Äàæå åñëè ïðîñòî îáíîâèòü ðàíåå çàãðóæåííóþ ñòðàíèöó - ñåðâåð áóäåò ñ÷èòàòü, ÷òî ê íåìó îáðàòèëñÿ íîâûé ïîëüçîâàòåëü.


Äëÿ ñòàòè÷åñêîãî ñàéòà ýòî âïîëíå äîñòàòî÷íî, ò.ê. ñîäåðæèìîå ñòðàíèö íå ìåíÿåòñÿ è âñåì ïîëüçîâàòåëÿì ïîêàçûâàåòñÿ îäíî è òî æå.À âîò äëÿ äèíàìè÷åñêèõ ñàéòîâ äåëî îáñòîèò íàìíîãî õóæå - çäåñü ñåðâåð äîëæåí êàêèì-òî îáðàçîì îòëè÷àòü ïîëüçîâàòåëåé äðóã îò äðóãà è âûäàâàòü êàæäîìó èç íèõ íóæíûå äàííûå.


PHP ïðåäëàãàåò ðåøåíèå íà îñíîâå ñåññèé. Ñåññèÿ - ýòî íàáîð ïàðàìåòðîâ è çíà÷åíèé, îäíîçíà÷íî îïðåäåëÿþùèõ ïîëüçîâàòåëÿ. Êàæäàÿ ñåññèÿ îáëàäàåò ñîáñòâåííûì óíèêàëüíûì èäåíòèôèêàòîðîì, ïîýòîìó ïîëüçîâàòåëþ äîñòàòî÷íî ñîîáùèòü ñåðâåðó èäåíòèôèêàòîð ñâîåé ñåññèè è ñåðâåð "âñïîìíèò" âñå ïîäðîáíîñòè è èñòîðèþ çàïðîñîâ ïîëüçîâàòåëÿ.


Èäåíòèôèêàòîð ñåññèè àâòîìàè÷åñêè ñîõðàíÿåòñÿ â áðàóçåðå ïîëüçîâàòåëÿ â âèäå cookie, à åñëè áðàóçåð cookie íå ïîääåðæèâàåò - èäåíòèôèêàòîð äîáàâëÿåòñÿ àâòîìàòè÷åñêè ê àäðåñó ñòðàíèöû è âñåì ññûëêàì íà íåé. Ýòî çíà÷èò, ÷òî ïðè îáíîâëåíèè ñòðàíèöû áðàóçåð ñàì îòïðàâèò íà ñåðâåð èäåíòèôèêàòîð ñåññèè, íåçàâèñèìî îò äåéñòâèé ïîëüçîâàòåëÿ.

 çàâèñèìîñòè îò íàñòðîåê PHP ñåññèè ìîãóò ñîçäàâàòüñÿ ëèáî âðó÷íóþ, ëèáî àâòîìàòè÷åñêè ïðè ïåðâîì îáðàùåíèè ïîëüçîâàòåëÿ. Ó áîëüøèíñòâî ïðîâàéäåðîâ àâòîìàòè÷åñêîå ñîçäàíèå ñåññèé íå âêëþ÷åíî èç ñîîáðàæåíèé ïðîèçâîäèòåëüíîñòè è áåçîïàñíîñòè.

Äëÿ ñîçäàíèÿ íîâîé ñåññèè íåîáõîäèìî âûçâàòü ôóíêöèþ session_start() áåç ïàðàìåòðîâ, ïîñëå ýòîãî ñòàíåò äîñòóïåí ãëîáàëüíûé ìàññèâ $_SESSION è â cookies áðàóçåðà ïîëüçîâàòåëÿ ïîÿâèòñÿ ýëåìåíò PHPSESSID.

<?php

	session_start();
    $_SESSION['sampleName'] = 'Èâàí Èâàíû÷';
    echo $_SESSION['sampleName'];

?>

Ñåññèÿ èíèöèèðóåòñÿ îäèí ðàç, à âñå ïîâòîðíûå âûçîâû session_start() ïðèâîäÿò òîëüêî ê ïîÿâëåíèþ ïðåäóïðåæäåíèÿ "Ñåññèÿ óæå îòêðûòà, ïîâòîðíîå îòêðûòèå íå äîïóñêàåòñÿ.". Äëÿ ïðîâåðêè, áûëà ëè óæå âûçâàíà ôóíêöèÿ session_start() ñóùåñòâóåò ñïåöèàëüíàÿ ôóíêöèÿ session_id(). Ýòà ôóíêöèÿ âñåãäà âîçâðàùàåò ñòðîêó ñ èäåíòèôèêàòîðîì ñåññèè, íî åñëè ñåññèÿ åù¸ íå ñîçäàíà - ñòðîêà áóäåò ïóñòîé.

<?php

	// îòêðûâàåì ñåññèþ òîëüêî åñëè îíà åù¸ 
    // íå áûëà îòêðûòà ðàíåå
     
	if(session_id() == '')
		session_start();
        
?>

Ýòîò ïðè¸ì î÷åíü óäîáåí, êîãäà âàø ñêðèïò ïîäêëþ÷àåò äðóãèå ñêðèïòû, â êîòîðûõ òàê æå ìîæåò áûòü âûçâàíà session_start().

Äëÿ òîãî, ÷òîáû âàøè äàííûå ñîõðàíÿëèñü íà ñåðâåðå ïðè ïåðåõîäàõ ìåæäó ñòðàíèöàìè, äîñòàòî÷íî ïîìåñòèòü èõ â ãëîáàëüíûé ìàññèâ $_SESSION. Íàïðèìåð:

<?php

	// îòêðûâàåì ñåññèþ
	session_start();
	
	// ïðîâåðÿåì íà íàëè÷èå èìåíè â URL-çàïðîñå
	if(isset($_GET['name']))
	{
		// ïîëó÷àåì èìÿ
		$name = $_GET['name'];

		// è ñîõðàíÿåì åãî â ñåññèè
		$_SESSION['name'] = $name;

		echo 'Èìÿ èçâëå÷åíî èç GET-çàïðîñà' . 
				"<br />\n";
	}
	// èíà÷å - ïðîâåðÿåì íàëè÷èå èìåíè â ñåññèè
	elseif(isset($_SESSION['name']))
	{
		// èçâëåêàåì èìÿ èç ñåññèè
		$name = $_SESSION['name'];

		echo 'Èìÿ èçâëå÷åíî èç äàííûõ ñåññèè' . 
				"<br />\n";
	}
	// èíà÷å - âûâîäèì ñîîáùåíèå îá îøèáêå.
	else
	{
		$name = 'íå îáíàðóæåíî';
		echo 'Èìÿ íå îáíàðóæåíî' . 
				"<br />\n";
	}

	// âûâîäèì èìÿ
	echo 'Ìî¸ èìÿ: ' . $name;

?>

Ñîõðàíèòå ýòîò êîä â ôàéëå myname.php â êîðíåâîì êàòàëîãå ëîêàëüíîãî ñåðâåðà è ïåðåéäèòå ïî àäðåñó http://localhost/myname.php. Ñêðèïò âûâåäåò ñîîáùåíèå, ÷òî èìÿ íå îáíàðóæåíî.

Òåïåðü èçìåíèòå àäðåñ ñòðàíèöû, äîïèñàâ ê íåìó "?name=Ivan" è ïåðåéäèòå ïî íîâîìó àäðåñó. Ñêðèïò ñîîáùèò, ÷òî îáíàðóæèë èìÿ â GET-çàïðîñå, è ÷òî âàøå èìÿ -Ivan. À òåïåðü ñíîâà ïåðåéäèòå ïî ïåðâîìó àäðåñó (áåç ïàðàìåòðîâ). Ñêðèïò ñîîáùàåò, ÷òî èìÿ èçâëå÷åíî èç äàííûõ ñåññèè, è ÷òî âàøå èìÿ ïî ïðåæäíåìó Ivan,

Èíîãäà âîçíèêàþò ñèòóàöè, êîãäà íàäî çàíîâî ñãåíåðèðîâàòü èäåíòèôèêàòîð ñåññèè. Äëÿ ýòîãî ñëóæèò ôóíêöèÿ session_regenerate_id(). Âûçûâàòü å¸ íóæíî ïîñëå îòêðûòèÿ ñåññèè:

<?php
    
	if(session_id() == '')
		session_start();
	else session_regenerate_id();
        
?>

Ïîêàçàíûé ïðè¸ì èíîãäà èñïîëüçóåòñÿ ïðè çàùèòå ñàéòîâ îò àòàê, çàêëþ÷àþùèõñÿ â ïîäìåíå çëîóìûøëåííèêîì ñâîåãî èäåíòèôèêàòîðà ñåññèè íà èäåíòèôèêàòîð ïîëüçîâàòåëÿ ñ áîëåå âûñîêèìè ïðèâèëåãèÿìè. Ïîäîáðàòü ÷óæîé èäåíòèôèêàòîð ïðàêòè÷åñêè íåâîçìîæíî, à âîò óçíàòü (ïðîñëóøèâàÿ ñåòü ñíèôôåðîì èëè ïîëüçóÿñü òðîÿíàìè) - âîçìîæíî.

Ýëåìåíòû ñåññèè ìîãóò áûòü íå òîëüêî ïðîñòûõ òèïîâ, íî è ìàññèâàìè:

<?php
    ...
	$_SESSION['myWorkWeek'] = array();
	...
	$_SESSION['myWorkWeek']['monday'] = 'Ïîíåäåëüíèê';
	$_SESSION['myWorkWeek']['tuesday'] = 'Âòîðíèê';
		...
	$_SESSION['myWorkWeek']['friday'] = 'Ïÿòíèöà';

	echo 'Ìîè ðàáî÷èå äíè: ' . 
		implode(', ', $_SESSION['myWorkWeek']);

	// âûâåäåò:
	// Ìîè ðàáî÷èå äíè: Ïîíåäåëüíèê, Âòîðíèê, ...
        
?>

Ñåññèþ ìîæíî çàêðûòü èëè óíè÷òîæèòü. Çàêðûòèå ñåññèè ïðîèñõîäèò ïðè âûçîâå ôóíêöèè session_write_close(). Ïðè ýòîì âñå èçìåíåíèÿ, ñäåëàííûå â ñåññèè, ñîõðàíÿþòñÿ â äèñêîâîì êåøå. Åñëè æå íåîáõîäèìî çàêðûòü ñåññèþ è óäàëèòü âñå å¸ äàííûå - íàäî âûçâàòü session_destroy() èëè session_unset(). Îòëè÷èå ìåæäó íèìè â òîì, ÷òî session_unset() ìîæåò èñïîëüçîâàòüñÿ â ñòàðîì êîäå, ãäå íåäîñòóïåí ãëîáàëüíûé ìàññèâ $_SESSION.

<?php
    ...

	// îñâîáîæäàåì âñå ïåðåìåííûå ñåññèè
	$_SESSION = array();


	// ñòèðàåì cookie èäåíòèôèêàòîðà ñåññèè
	if (isset($_COOKIE[session_name()])) 
	{
   		setcookie(session_name(), '', time()-42000, '/');
	}

	// óíè÷òîæàåì ñåññèþ
	session_destroy();
   
?>

Êàê âèäèòå, ðàáîòàòü ñ ñåññèÿìè äîñòàòî÷íî ïðîñòî. Òîëüêî íå íàäî çàáûâàòü, ÷òî îáú¸ì äàííûõ, ñîõðàíÿåìûõ â ñåññèè, â êîíöå êîíöîâ êîíå÷åí è íå íàäî ñîõðàíÿòü ëèøíåãî.



 íà÷àëî ñòðàíèöû



 íà÷àëî ñòðàíèöû