Sessions

Status
Niet open voor verdere reacties.

JeroenE

Terugkerende gebruiker
Lid geworden
20 mrt 2005
Berichten
1.950
Hallo,

Ik ben een nieuwe site aan het maken waar mensen kunnen registreren en in- en uitloggen. Vroeger werkte ik met cookies, tot op een gegeven moment dat dat precies niet meer lukte.
Daarom heb ik beslist met sessions te werken, maar ik weet totaal niet hoe ik eraan moet beginnen en waar ik moet op letten.
Het registreren is geen probleem, maar eens ze ingelogd zijn moeten ze ingelogd blijven, tot ze zelf uitloggen, de browser sluiten of een bepaalde tijd inactief zijn.
Kan iemand mij op weg helpen?
Alvast bedankt.

Groetjes,

Jeroen.
 
Nou, ten eerste wil ik zeggen dat sessions niet veilig zijn, TENZIJ je ip's gaat vastleggen en bij elke pagina gaat controleren of alle data nog klopt.

Om sessies te starten, moet je de functie session_start() aanroepen, zet dit helemaal bovenaan je pagina (voorkomt foutcodes).

Als je nu een sessie wil openen, gebruik je dit:
$_SESSION['voorbeeld'] = 'Dit is de inhoud';

Als de sessie weer wil oproepen, kun je gewoon
echo $_SESSION['voorbeeld'];
gebruiken.

Het is dus een aardig normale variabele, die je overal in kan verwerken.

Om een sessie te vernietigen, gebruik je:
unset($_SESSION['voorbeeld']);

Om ALLE sessies te vernietigen, gebruik je:
session_destroy();


Niet vergeten: IP's vastleggen, sessieid's vastleggen, en al dit soort dingen bij elke pagina die er bezocht wordt controleren! Alleen dan zijn sessies veilig om in een inlogsysteem te gebruiken!
 
Dank je wel, 5blabla5, voor jouw reactie.
Als ik dat zo lees, heb ik het gevoel dat jij eerder zou opteren om de werking van de cookies in orde te krijgen.
Wat is het eenvoudigste om te doen. De cookies, of sessions?
 
Een session is altijd veiliger dan een cookie. Om de simpele reden dat een cookie bij de gebruiker wordt opgeslagen en een sessie op de server.

Ook het feit dat je IP's zou moeten loggen om het veilig te maken, is niet waar. Als je

PHP:
$_SESSION[ 'loggedin' ] = true;

gebruiker en controleert met:

PHP:
if ( $_SESSION[ 'loggedin' ] ) {}

Heb je een behoorlijke mate van veiligheid. Wellicht niet voldoende om een banksite mee te beveiligen, maar voor de meeste website is dit meer dan voldoende en echt niet zomaar te 'hacken'.
 
Hmmm, had wel ergens op internet gelezen dat je met een beetje moeite kon inbreken op iemand anders sessie, dus ik raad alsnog ip's loggen en controleren aan.

Bij beveiligen gaat het puur om controleren, controleren en nogmaals controleren. Dus ja :)

Oohw trouwens, ik weet niets van cookies af, dus ik kan niet zeggen wat je beter kunt nemen :o
 
Kan ik die session in submappen ook gewoon gebruiken?
Ik heb het volgende:
- pagina om de taal te kiezen in de hoofdmap
- login en logout pagina voor nl en voor en in de hoofdmap
- de rest per taal in een submap nl of en
 
Ik heb het geprobeerd, en het lukt dus niet.
Hoe kan ik dit verhelpen?
 
Zou je dan niet laten zien wat je hebt geprobeerd?
 
Je hebt gelijk, SvU :thumb:

PHP:
if ($_POST["pwd"]) {
	$semail = $_POST["email"];
	$spwd = $_POST["pwd"];
	$sql = "SELECT * from contactlist";
	$res = mysql_query($sql,$db);
	while ($line = mysql_fetch_object($res)) {
		if (($semail == $line->email) && ($spwd == $line->code)) {
			$_SESSION["loggedin"] = true;
			$berror = false;
		} else if ((($spwd == $line->code) && ($semail != $line->email)) || (($semail == $line->email) && ($spwd != $line->code))) {
			$berror = true;
		};
	};
};
Dit werkt, tot ik volgens de gekozen taal naar de corresponderende submap ga.
 
Laatst bewerkt:
Die submap, zit die op een ander domein ofzo? En roep je wel sessions_start() aan in die file? Want anders wordt de sessie niet geactiveerd.
 
Deed ik dus niet, maar nu wel, en ik sluit af met session_write_close(), of doe ik dat beter niet?
Moet ik voor session_start() de sessie een naam geven met session_name()?
En de submap bevindt zich in dezelfde map als de inlogpagina.
 
Laatst bewerkt:
Nee, die heb je niet echt nodig, tenzij je meerdere verschillende sessies hebt, maar dat zal wel niet.

Werkt het nu wel?
 
Neen, het lijkt me niet te lukken.
Zelfs niet als ik de inlogpagina's in dezelfde map zet als de gekozen taal.
Het blijkt alleen te werken voor de inlogpagina zelf en voor alle andere niet.
Ik krijg zelfs een foutmelding als ik inlog:
Code:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /customers/jemimaja.be/jemimaja.be/httpd.www/opp/nl/inloggen.php:7) in /customers/jemimaja.be/jemimaja.be/httpd.www/opp/nl/inloggen.php on line 21
Dit is wat ik nu heb:
PHP:
if ($_POST["pwd"]) {
	$semail = $_POST["email"];
	$spwd = md5(md5(md5($_POST["pwd"])));
	$sql = "SELECT * from contactlist";
	$res = mysql_query($sql,$db);
	while ($line = mysql_fetch_object($res)) {
		if (($semail == $line->email) && ($spwd == $line->code)) {
			session_start();
			$_SESSION["loggedin"] = true;
			$shash = $line->hash;
		};
	};
	if (!$_SESSION["loggedin"]) {
		$berror = true;
	};
};
en de action van het inlogformulier is $PHP_SELF.
 
Laatst bewerkt:
Ja die foutmelding geeft precies aan wat er mis gaat :P

Je moet session_start() aanroepen voor je output stuurt naar de browser, anders heeft het geen effect. Dat betekend dat je moet beginnen met php mode openen en dat aanroepen voor je zelfs maar een spatie of een < van je document teruggeeft.
 
Moet ik dan de session_start() aanroepen voor de rest van de php?
 
Je moet het iig aanroepen voordat je HTML verstuurt. Het veiligst is om het gewoon helemaal bovenaan het script te zetten.
 
Ik heb het voorlopig opgelost met cookies, en het werkt.
Toch had ik graag een oplossing gevonden om, eens ik sessions onder de knie heb, daarop over te schakelen, dus wie ideeën heeft, laat maar komen, hé.
Alvast bedankt voor de hulp.
 
ik ben sinds kort ook met sessies begonnen en had dezelfde fout nu heb ik in mijn index dit gezet

Code:
<?php
session_start();
?>
<html>
etc....

nu werkt het wel
mischien ook bij jou;)

sccs als je vragen hebt kun je altyd mailen,
Brian van der Horst
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan