148 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			148 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								title: PHP Sessions
							 | 
						||
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# PHP Sessions
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A session is a way to store information (in variables) to be used across multiple pages.  
							 | 
						||
| 
								 | 
							
								Unlike a cookie, the information is not stored on the user's computer.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## What is a PHP Session?
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								When you work with an application, you open it, do some changes, and then you close it. This is much like a Session.  
							 | 
						||
| 
								 | 
							
								The computer knows who you are. It knows when you start the application and when you end.  
							 | 
						||
| 
								 | 
							
								But on the internet there is one problem: the web server does not know who you are or what you do, because the HTTP address _doesn't maintain state_.  
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Session variables solve this problem by storing user information to be used across multiple pages (e.g. username, favorite color, etc).  
							 | 
						||
| 
								 | 
							
								By default, session variables last until the user closes the browser.  
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								**Session variables hold information about one single user, and are available to all pages in one application.**  
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								**Note:** If you need a permanent storage, you may want to store the data in a database.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Start a PHP Session
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								A session is started with the _session_start()_ function.  
							 | 
						||
| 
								 | 
							
								Session variables are set with the PHP global variable: $_SESSION.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								**Example:**
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								// Start the session
							 | 
						||
| 
								 | 
							
								session_start();
							 | 
						||
| 
								 | 
							
								?>
							 | 
						||
| 
								 | 
							
								<!DOCTYPE html>
							 | 
						||
| 
								 | 
							
								<html>
							 | 
						||
| 
								 | 
							
								<body>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								// Set session variables
							 | 
						||
| 
								 | 
							
								$_SESSION["favcolor"] = "blue";
							 | 
						||
| 
								 | 
							
								$_SESSION["favanimal"] = "dog";
							 | 
						||
| 
								 | 
							
								echo "Session variables are set.";
							 | 
						||
| 
								 | 
							
								?>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</body>
							 | 
						||
| 
								 | 
							
								</html>
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								**Note:** The session_start() function must be the **very first thing** in your document. **Before** any HTML tags.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Output:  
							 | 
						||
| 
								 | 
							
								Session variables are set.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Get PHP Session Variable Values
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Note that session variables are not passed individually to each new page, instead they are retrieved from the session we open at the beginning of each page (session_start()).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Also note that all session variable values are stored in the global $_SESSION variable:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								**Example:**
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								session_start();
							 | 
						||
| 
								 | 
							
								?>
							 | 
						||
| 
								 | 
							
								<!DOCTYPE html>
							 | 
						||
| 
								 | 
							
								<html>
							 | 
						||
| 
								 | 
							
								<body>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								// Echo session variables that were set on previous page
							 | 
						||
| 
								 | 
							
								echo "Favorite color is " . $_SESSION["favcolor"] . ".<br>";
							 | 
						||
| 
								 | 
							
								echo "Favorite animal is " . $_SESSION["favanimal"] . ".";
							 | 
						||
| 
								 | 
							
								?>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</body>
							 | 
						||
| 
								 | 
							
								</html>
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Output:  
							 | 
						||
| 
								 | 
							
								Favorite color is blue.  
							 | 
						||
| 
								 | 
							
								Favorite animal is dog.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Another way to show all the session variable values for a user session is to run the following code:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								print_r($_SESSION);
							 | 
						||
| 
								 | 
							
								?>
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### How does it work?
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Most sessions set a user-key on the user's computer that looks something like this: 765487cf34ert8dede5a562e4f3a7e12.  
							 | 
						||
| 
								 | 
							
								Then, when a session is opened on another page, it scans the computer for a user-key.  
							 | 
						||
| 
								 | 
							
								If there is a match, it accesses that session, if not, it starts a new session.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Modify a Session Variable
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								To change a session variable, just overwrite it:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								**Example:**
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								session_start();
							 | 
						||
| 
								 | 
							
								?>
							 | 
						||
| 
								 | 
							
								<!DOCTYPE html>
							 | 
						||
| 
								 | 
							
								<html>
							 | 
						||
| 
								 | 
							
								<body>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								// to change a session variable, just overwrite it 
							 | 
						||
| 
								 | 
							
								$_SESSION["favcolor"] = "pink";
							 | 
						||
| 
								 | 
							
								print_r($_SESSION);
							 | 
						||
| 
								 | 
							
								?>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</body>
							 | 
						||
| 
								 | 
							
								</html>
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Destroy a PHP Session
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								To remove all global session variables and destroy the session, use _session_unset()_ and _session_destroy()_:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								**Example:**
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								session_start();
							 | 
						||
| 
								 | 
							
								?>
							 | 
						||
| 
								 | 
							
								<!DOCTYPE html>
							 | 
						||
| 
								 | 
							
								<html>
							 | 
						||
| 
								 | 
							
								<body>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								// remove all session variables
							 | 
						||
| 
								 | 
							
								session_unset(); 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// destroy the session 
							 | 
						||
| 
								 | 
							
								session_destroy(); 
							 | 
						||
| 
								 | 
							
								?>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								</body>
							 | 
						||
| 
								 | 
							
								</html>
							 | 
						||
| 
								 | 
							
								```
							 |