Archief - Sessie probleem

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

shopshop

Legacy Member
Ik zit met een probleem, offline werkt alles normaal enkel online op one.com werkt de sessie niet. Ik kan dus gewoon op de pagina komen zonder autorisatie.

De verbinding met database is wel correct want de login pagina wekt wel.

De classe
PHP:
<?php

class Login
{
  private $_id;
  private $_username;
  private $_password;
  private $_passmd5;

  private $_errors;
  private $_access;
  private $_login;
  private $_token;

  public function __construct()
  {
    $this->_errors = array();
    $this->_login  = isset($_POST['login'])? 1 : 0;
    $this->_access = 0;
    $this->_token  = $_POST['token'];

    $this->_id       = 0;
    $this->_username = ($this->_login)? $this->filter($_POST['username']) : $_SESSION['username'];
    $this->_password = ($this->_login)? $this->filter($_POST['password']) : '';
    $this->_passmd5  = ($this->_login)? md5($this->_password) : $_SESSION['password'];
  }

  public function isLoggedIn()
  {
    ($this->_login)? $this->verifyPost() : $this->verifySession();

    return $this->_access;
  }

  public function filter($var)
  {
    return preg_replace('/[^a-zA-Z0-9]/','',$var);
  }

  public function verifyPost()
  {
    try
    {
      if(!$this->isTokenValid())
         throw new Exception('Invalid Form Submission');

      if(!$this->isDataValid())
         throw new Exception('Invalid Form Data');

      if(!$this->verifyDatabase())
         throw new Exception('Invalid Username/Password');

    $this->_access = 1;
    $this->registerSession();
    }
    catch(Exception $e)
    {
      $this->_errors[] = $e->getMessage();
    }
  }

  public function verifySession()
  {
    if($this->sessionExist() && $this->verifyDatabase())
       $this->_access = 1;
  }

  public function verifyDatabase()
  {
    //Database Connection Data
    mysql_connect('§§§§', '§§§§§', '§§§§') or die(mysql_error());
    mysql_select_db("§§§§§") or die(mysql_error());

    $data = mysql_query("SELECT ID FROM gebruikers WHERE username = '{$this->_username}' AND password = '{$this->_passmd5}'");

    if(mysql_num_rows($data))
      {
        list($this->_id) = @array_values(mysql_fetch_assoc($data));
        return true;
      }
    else
      { return false; }
  }

  public function isDataValid()
  {
    return (preg_match('/^[a-zA-Z0-9]{5,12}$/',$this->_username) && preg_match('/^[a-zA-Z0-9]{5,12}$/',$this->_password))? 1 : 0;
  }

  public function isTokenValid()
  {
    return (!isset($_SESSION['token']) || $this->_token != $_SESSION['token'])? 0 : 1;
  }

  public function registerSession()
  {
    $_SESSION['ID'] = $this->_id;
    $_SESSION['username'] = $this->_username;
    $_SESSION['password'] = $this->_passmd5;
  }

  public function sessionExist()
  {
    return (isset($_SESSION['username']) && isset($_SESSION['password']))? 1 : 0;
  }

  public function showErrors()
  {
    echo "<h3>Errors</h3>";

    foreach($this->_errors as $key=>$value)
      echo $value."<br>";
  }
}

?>

Sessie
PHP:
<?php session_start(); include('inc/classes.php'); $login = new Login(); if($login->isLoggedIn()) echo "Members Area"; else header('Location: index.php');?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="robots" content="noindex,nofollow">
<title>PC<title>
<link href="css/stylecss.css" rel="stylesheet" type="text/css" />
</head>

Maar het probleem lijkt mij niet in de code te liggen doordat het offline wel werk. De database word op de pagina zelf nog wel eens geladen maar dat lijkt mij ook geen probleem te zijn.

Ik snap niet waar de fout zit.

adrianhates

Legacy Member
misschien de error er is bijzetten? :) Heb je error reporting op staan? Wie weet is de versie van PHP niet compatible , ik doe maar een lukrake gok!

shopshop

Legacy Member
Bedankt voor je antwoord.

Errors waren nog niet gestart, deze error krijg ik:
Warning: session_start(): Cannot send session cache limiter - headers already sent

Ik heb wel een oplossing zodat de pagina niet weergegeven word maar zonder een redirect:
else { header('Location: index.php'); exit; }

Iemand enige idee waarom de header niet werk ?

Zero Grav

Legacy Member
Een header() en een session_start() moeten in uw code staan voor eender welke output. Dus voor ge zelfs nog maar een spatie zet buiten php moet die code er staan. Wat op zich wel lijkt te kloppen in de code die ge hier plakt, maar aangezien em die fout geeft hebt ge dat precies toch niet heel correct gedaan.

shopshop

Legacy Member
Inderdaad het was een spatie boven de sessie.
Probleem is dus opgelost nu.

Bedankt allemaal

meuh

Legacy Member
Nog een oplossing is helemaal bovenaan je pagina <?php ob_start(); ?> te zetten en onderaan <?php ob_flush(); ?>
Ik had dit probleem vroeger ook eens en had nergens een spatie te veel staan.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan