In this wiki I will show how to Disallowing login from multi places. User can login or access their account at time, only single place.
In your models (User class)
/**
	 * session_validate()
	 * Will check if a user has a encrypted key stored in the session array.
	 * If it returns true, user is the same as before
	 * If the method returns false, the session_id is regenerated
	 *
	 * @param {String} $email	The users email adress
	 * @return {boolean} True if valid session, else false
	 */
	
	public function session_validate(  )
	{
		// Encrypt information about this session
		$user_agent = $this->session_hash_string($_SERVER['HTTP_USER_AGENT'], $this->user_email);
	
		// Check for instance of session
		if ( session_exists() == false )
		{
			// The session does not exist, create it
			$this->session_reset($user_agent);
		}
		
		// Match the hashed key in session against the new hashed string
		if ( $this->session_match($user_agent) )
		{
			return true;
		}
		
		// The hashed string is different, reset session
		$this->session_reset($user_agent);
		return false;
	}
	
	/**
	 * session_exists()
	 * Will check if the needed session keys exists.
	 *
	 * @return {boolean} True if keys exists, else false
	 */
	
	private function session_exists()
	{
		return isset($_SESSION['USER_AGENT_KEY']) && isset($_SESSION['INIT']);
	}
	
	/**
	 * session_match()
	 * Compares the session secret with the current generated secret.
	 *
	 * @param {String} $user_agent The encrypted key
	 */
	
	private function session_match( $user_agent )
	{
		// Validate the agent and initiated
		return $_SESSION['USER_AGENT_KEY'] == $user_agent && $_SESSION['INIT'] == true;
	}
	
	/**
	 * session_encrypt()
	 * Generates a unique encrypted string
	 *
	 * @param {String} $user_agent		The http_user_agent constant
	 * @param {String} $unique_string	 Something unique for the user (email, etc)
	 */
	
	private function session_hash_string( $user_agent, $unique_string )
	{
		return md5($user_agent.$unique_string);
	}
	
	/**
	 * session_reset()
	 * Will regenerate the session_id (the local file) and build a new
	 * secret for the user.
	 *
	 * @param {String} $user_agent
	 */
	
	private function session_reset( $user_agent )
	{
		// Create new id
		session_regenerate_id(TRUE);
		$_SESSION = array();
		$_SESSION['INIT'] = true;
		
		// Set hashed http user agent
		$_SESSION['USER_AGENT_KEY'] = $user_agent;
	}
	
	/**
	 * Destroys the session
	 */
	
	private function session_destroy()
	{
		// Destroy session
		session_destroy();
	}
What will do -
- Concatenate the user agent with their email adress and md5 it. This is their secret key, store as unique info as possible.
- Compare this key for each request and also just check if a session key is true.
Courtesy - Prevent login from two places
someone could help me with this code.
I created the functions but my users are multi sesion.
Thank you
I want to integrate this code with my UserIdentity
If you have any questions, please ask in the forum instead.
Signup or Login in order to comment.