sessie is verloren na jquery request
ik heb een probleempje, ik maak een sessie aan via php/jquery.
Maar als ik dan de sessie in firefox wil gebruiken werkt het, maar zodra ik het in IE of chrome doe raakt de sessie helemaal verloren.
Code bij jquery:
Code in php:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
session_start();
$sqlhost = "localhost"; //mysql host (usually localhost)
$sqluser = "root"; //mysql username
$sqlpass = ""; //mysql password
$sqldb = "chat"; //mysql database name
$user = mysql_real_escape_string($_POST['user']);
$pass = ep($user,mysql_real_escape_string($_POST['pass']));
$query = mysql_query("SELECT * FROM users WHERE email='".$user."' AND pass='".$pass."'");
if($query) {
if(mysql_num_rows($query) > 0) {
$query = mysql_query("SELECT * FROM users WHERE email='$user'");
$row = mysql_fetch_array($query);
$_SESSION['name'] = $row['user'];
die("1");
}else{
die("0");
}
}else{
die("2");
}
?>
session_start();
$sqlhost = "localhost"; //mysql host (usually localhost)
$sqluser = "root"; //mysql username
$sqlpass = ""; //mysql password
$sqldb = "chat"; //mysql database name
$user = mysql_real_escape_string($_POST['user']);
$pass = ep($user,mysql_real_escape_string($_POST['pass']));
$query = mysql_query("SELECT * FROM users WHERE email='".$user."' AND pass='".$pass."'");
if($query) {
if(mysql_num_rows($query) > 0) {
$query = mysql_query("SELECT * FROM users WHERE email='$user'");
$row = mysql_fetch_array($query);
$_SESSION['name'] = $row['user'];
die("1");
}else{
die("0");
}
}else{
die("2");
}
?>
Ik heb de bovenstaande code vereenvoudigt.
Alvast bedankt,
Jeffrey
Gewijzigd op 02/05/2012 11:32:36 door Jeffrey Barn
- Waarom al zoveel die in je code?
- Waarom 2 verschillende queries? De opmaak bedoel ik.
- Waarom staat er 'ep' in je $pass?
Als je de gebruikersnaam ergens wil printen op je scherm (neem aan dat hij daarom in een sessie zit), raad ik ook aan een htmlspecialchars te gebruiken, anders kan een lolbroek je site layout welleens veranderen.
Ik vind het wel appart dat deze code werkt in FF, echter is FF wel iets gemoedelijker als IE uiteraard. Ik raad aan de code eens goed te herschrijven met structuur en zonder all die dies.
ik kan me vergissen, maar er zijn helemaal geen sessies mogelijk in jQuery? jQuery is javascript, dus client-side. sessions worden toch server-side opgeslagen, en heeft de client toch geen toegang tot?
Jeroen vd op 02/05/2012 12:46:08:
ik kan me vergissen, maar er zijn helemaal geen sessies mogelijk in jQuery? jQuery is javascript, dus client-side. sessions worden toch server-side opgeslagen, en heeft de client toch geen toegang tot?
De sessie wordt toch netjes in php gemaakt in het onderste script? Waar hij dat stukje jQuery voor gebruikt, geen idee is te weinig code om te zien denk ik.
In het jQuery doet hij niets met de sessie (voor zover duidelijk is in dat 1ne regeltje)
P.S. voglens mij moet dat wat hij wil je het javascript ook met get en niet met post. Hij probeerd dat uit een url te halen lijkt me.
Gewijzigd op 02/05/2012 12:53:58 door Chris PHP
- de querys kun je samenvoegen tot 1, selecteer alle velden die je nodig hebt
- die die()'s aan het einde zijn volgens mij niet nodig, dat kun je ook af met echo's
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
session_start();
$sqlhost = "localhost"; //mysql host (usually localhost)
$sqluser = "root"; //mysql username
$sqlpass = ""; //mysql password
$sqldb = "chat"; //mysql database name
$query = mysql_query(
"SELECT
veld1,
veld2
FROM
users
WHERE
email = '" . mysql_real_escape_string($_POST['user']) . "'
AND
pass='" . ep($user,mysql_real_escape_string($_POST['pass'])) . "'");
if($query === false)
{
trigger_error(mysql_error($query));
}
else
{
if(mysql_num_rows($query) > 0)
{
$row = mysql_fetch_array($query);
$_SESSION['name'] = $row['user'];
echo '1';
}
else
{
echo '0'
}
echo '2';
}
?>
session_start();
$sqlhost = "localhost"; //mysql host (usually localhost)
$sqluser = "root"; //mysql username
$sqlpass = ""; //mysql password
$sqldb = "chat"; //mysql database name
$query = mysql_query(
"SELECT
veld1,
veld2
FROM
users
WHERE
email = '" . mysql_real_escape_string($_POST['user']) . "'
AND
pass='" . ep($user,mysql_real_escape_string($_POST['pass'])) . "'");
if($query === false)
{
trigger_error(mysql_error($query));
}
else
{
if(mysql_num_rows($query) > 0)
{
$row = mysql_fetch_array($query);
$_SESSION['name'] = $row['user'];
echo '1';
}
else
{
echo '0'
}
echo '2';
}
?>
Gewijzigd op 02/05/2012 14:12:33 door Jeroen VD
Waarom $user en $pass nog vullen? Doe je zo helemaal niets mee.
Als alles nu goed gaat krijg je als uitkomst '12', volgens mij ook niet helemaal gelijk aan wat de TS oorspronkelijk had.
nog iets wat ik vergeten te vragen was: wat doet de functie ep()? kan er niets over vinden op php.net.
en natuurlijk ook trigger_error()? ik werk met PDO, en voordat ik daarmee ging werken heb ik foutafhandeling nooit goed toegepast.
maar wat de TS nu heeft, kan helemaal niet. er staat daar een else voor nop bij, ik dacht dat hij dit bedoelde.
Gewijzigd op 02/05/2012 14:08:10 door Jeroen VD
En trigger_error zal zou niet werken, plaats er een mysql_error in als argument ofzo.
EP is voor password encryptie ;)
Maar bedankt :)
Maar waarom gebruik je twee verschillende stylen in je queries?
De eerste op regel 12:
Code (php)
1
2
3
2
3
<?php
$query = mysql_query("SELECT * FROM users WHERE email='".$user."' AND pass='".$pass."'");
?>
$query = mysql_query("SELECT * FROM users WHERE email='".$user."' AND pass='".$pass."'");
?>
De tweede op regel 15:
ep ja? Ik gebruik meestal hash, kun jij eens naar de php.net functie van ep linken kreeg hem zelf niet gevonden namelijk.
Gewijzigd op 03/05/2012 07:40:51 door Chris PHP
ps: let op dat je mysql_real_escape_string(ep(...)) moet doen, niet ep(mysql_real_escape_string(..)). Je wilt immers de ge-escapte versie van de ep() van de string opslaan, en niet de ep van de ge-escapete versie van de string.