85 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: Sessions
 | |
| ---
 | |
| ## Sessions
 | |
| 
 | |
| Sessions are a feature in PHP that allow you to store data server side about a user. When a session is setup, a browser cookie is set which identifies the user to PHP so the PHP knows which server side variables to access.
 | |
| 
 | |
| ### Starting A Session
 | |
| On every page you want to access the session you will need to start (or load) the session. To do so run the `session_start()` function which loads the PHP Session System.
 | |
| ```PHP
 | |
| <?php
 | |
| session_start();
 | |
| ```
 | |
| 
 | |
| Please note, that when using cookie-based sessions, session_start() must be called before outputing anything to the browser. anything else will result in an error.
 | |
| 
 | |
| ### Accessing And Setting Data In A Session
 | |
| The `$_SESSION['key']` variable is a special type of array (using a browser cookie to determine which session to access).
 | |
| 
 | |
| In the below example you see the user's choice of theme is set to theme number one.
 | |
| ```PHP
 | |
| <?php
 | |
| session_start();
 | |
| $_SESSION['themechoice'] = 1;
 | |
| ```
 | |
| Accessing a session variable is similar to setting one. Simply include the variable where it needs to be accessed. For example echoing it out as shown in the code example below.
 | |
| ```PHP
 | |
| <?php
 | |
| session_start();
 | |
| echo $_SESSION['themechoice'];
 | |
| ```
 | |
| 
 | |
| ### Removing A Session
 | |
| To remove a session from the system run the following PHP code. It will unset the session variables and delete it from the system.
 | |
| ```PHP
 | |
| <?php
 | |
| session_unset();
 | |
| session_destroy();
 | |
| ```
 | |
| 
 | |
| Here's a full example to manually expire a user's session:
 | |
| ```PHP
 | |
| <?php
 | |
| //Start our session.
 | |
| session_start();
 | |
| 
 | |
| //Expire the session if user is inactive for 30
 | |
| //minutes or more.
 | |
| $expireAfter = 30;
 | |
| 
 | |
| //Check to see if our "last action" session
 | |
| //variable has been set.
 | |
| if(isset($_SESSION['last_action'])){
 | |
|     
 | |
|     //Figure out how many seconds have passed
 | |
|     //since the user was last active.
 | |
|     $secondsInactive = time() - $_SESSION['last_action'];
 | |
|     
 | |
|     //Convert our minutes into seconds.
 | |
|     $expireAfterSeconds = $expireAfter * 60;
 | |
|     
 | |
|     //Check to see if they have been inactive for too long.
 | |
|     if($secondsInactive >= $expireAfterSeconds){
 | |
|         //User has been inactive for too long.
 | |
|         //Kill their session.
 | |
|         session_unset();
 | |
|         session_destroy();
 | |
|     }
 | |
|     
 | |
| }
 | |
| 
 | |
| //Assign the current timestamp as the user's
 | |
| //latest activity
 | |
| $_SESSION['last_action'] = time();
 | |
| ```
 | |
| 
 | |
| ### Sessions Are Temporary
 | |
| It is important to not treat a session as permanent storage. They get cleared from time to time by the developer, whenever the application is moved to a new host server, by the application itself (for example a logout button), and even during server maintenance. For long term storage of data make sure to use a database.
 | |
| 
 | |
| ### Security
 | |
| Last but not least it's important to use php sessions securely. Read our article on [Session Identifier Acquirement](/php/security/session-identifier-acquirement) and [Session Hijacking](/php/security/session-hijacking) for more information.
 | |
| 
 | |
| #### More Information:
 | |
| * <a href="https://secure.php.net/manual/en/book.session.php">php.net session manual</a>
 |