request class
Pagina: « vorige 1 2 3 4 5 volgende »
Voor mijn beeldvorming... de sessie class is de huidige sessie, en de session manager gebruik je om sessies aan te maken, updaten en te verwijderen... maar dus ook om de huidige sesie uit te lezen.
Maar je bestuurt je huidige sessie dus ook met de session manager? Dan vraag ik me wel af wat voor functies er zitten in die session class? Moet ik me die session class dan voorstellen als een soort opslag container met een set en een get functie? En dat je dan via de session manager de set en get functie van de session class aanspreekt?
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php
class Session
{
/**
* Sets the identifier of this session.
*
* @param int $id
*/
public function setId($id)
{}
/**
* Gets the identifier of this session.
*
* @return int
*/
public function getId()
{}
/**
* Sets the value of this session.
*
* @param string $value
*/
public function setValue($value)
{}
/**
* Gets the value of this session.
*
* @return string
*/
public function getValue()
{}
}
class SessionManager
{
/**
* Creates a session.
*
* @param int $id
* @param string $value
*/
public function create($id, $value)
{}
/**
* Gets a session by identifier.
*
* @param int $id
*/
public function read($id)
{}
/**
* Updates a session.
*
* @param Session $session
*/
public function update(Session $session)
{}
/**
* Deletes a session.
*
* @param Session $session
*/
public function delete(Session $session)
{}
}
?>
class Session
{
/**
* Sets the identifier of this session.
*
* @param int $id
*/
public function setId($id)
{}
/**
* Gets the identifier of this session.
*
* @return int
*/
public function getId()
{}
/**
* Sets the value of this session.
*
* @param string $value
*/
public function setValue($value)
{}
/**
* Gets the value of this session.
*
* @return string
*/
public function getValue()
{}
}
class SessionManager
{
/**
* Creates a session.
*
* @param int $id
* @param string $value
*/
public function create($id, $value)
{}
/**
* Gets a session by identifier.
*
* @param int $id
*/
public function read($id)
{}
/**
* Updates a session.
*
* @param Session $session
*/
public function update(Session $session)
{}
/**
* Deletes a session.
*
* @param Session $session
*/
public function delete(Session $session)
{}
}
?>
Het mooie hiervan is dat je veel verschillende soorten SessionManagers kunt gebruiken, eentje die de sessies in de Response class instelt, eentje die ze in de database opslaat, ect. Met DI is het een kwestie van 1 regeltje aanpassen en klaar ben je!
$session = new Session();
$session->set('iets', 'iets');
echo $session->get('iets');
Even een paar vragen over de functies in de bovengenoemde classes:
- setId($id): wat bedoel je hiermee... een session krijgt toch automatisch een session_id?
- update: wat bedoel je hiermee. Wat versta je onder het "updaten" van een sessie?
Dat komt door een benamings verschil tussen jou en mij, jij zal het waarschijnlijk Session::setName($name) noemen.
>> update: wat bedoel je hiermee. Wat versta je onder het "updaten" van een sessie?
Maar je hebt het hier toch over de sessie_naam? Dus de naam van het sessiebestand? Die geef ik namelijk nooit een naam omdat dat vanzelf gebeurt als je session_start uitvoert. Waarom zou je die naam aanpassen? Maar waarschijnlijk begrijp ik je verkeerd.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$session = $sessionManager->get('foo');
$session->setValue('new value');
$sessionManager->update($session);
?>
$session = $sessionManager->get('foo');
$session->setValue('new value');
$sessionManager->update($session);
?>
$session = $sessionManager->get('foo');
Wat haal je hier nu precies op? Haal je een complete S_SESSION array op? Of haal je nu $_SESSION['foo'] op?
Sorry, ben even de weg kwijt.
$session->setValue('new value');
Voer je hier een waarde toe aan de $_SESSION array, of wijzig je hier de waarde van $_SESSION['foo']?
En met get haal je slechts een enkele sessie (dus array item) uit de $_SESSION array die overeenkomt met de sessie naam (foo) die opgegeven wordt, tenzij je een database als sessie gebruikt dan wordt een database item opgehaald die overeen komt met 'foo'.
$session = $sessionManager->get('foo');
Dit haalt dus de waarde 'foo' op uit de sessie die actief is in de session manager. Echter, ik zie in het codevoorbeeld hierboven geen 'get' functie in de session manager class.
$session->setValue('new value');
Dit begrijp ik niet. Eerst stop je een waarde in de variabele $session en vervolgens laat je daar een functie op los?
>> Dit begrijp ik niet. Eerst stop je een waarde in de variabele $session en vervolgens laat je daar een functie op los?
Nee, je geeft een Session object terug, geen sessie waarde.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$session = $sessionManager->get('foo');
$session->setValue('new value');
$sessionManager->update($session);
?>
$session = $sessionManager->get('foo');
$session->setValue('new value');
$sessionManager->update($session);
?>
Haal de sessie 'foo' op (dit geeft een sessie object terug, waarbij foo de identifier van de sessie is), stel een waarde in in het sessio object. En dan update je de sessie in de session manager. Hoe werkt die laatste functie, die update functie. Hoe zou die er in het echt uitzien? (Houdt dit dan in dat je telkens als je iets wijzigt in de sessie dat je de update functie moet uitvoeren?)
Zoiets zal het eruit zien. En ja elke keer als jij iets wijzigt in de sessie (hoe vaak komt dat nou voor?) moet je hem updaten. Je zal misschien zeggen, ik kan ook dit doen
wat in principe niet fout is. Het is alleen wel mooier om een aparte sessie (sessie is tenslotte een zelfstandig naamwoord) class te maken. Je moet zo ver gaan als je zelf wilt
$_SESSION[$session->getId()] = $session->getValue()
Je slaat het id van de betreffende sessie op in de huidige sessie en daar ken je een niet gedefinieerde waarde aan toe? :-s
$session->getId() bevat de key van de array en $session->getValue() bevat de value van de Session. Je slaat dus gewoon de sessie op, zeg maar:
@Wouter: het ligt denk ik aan de benamingen dat ik het niet helemaal begrijp.
setID() bedoel je daarmee de key van de session? En met setValue, is dat de waarde die je toekent aan die ID?
in platte code, is wat jij doet:
$_SESSION['foo'] = 'lorem ipsum';
?
Ja
$session->setId('foo');
$session->setValue('lorem ipsum');
En niet dit:
$session->set('foo', 'lorem ipsum');
Ozzie PHP op 08/01/2013 20:06:46:
@Not Moose: ik begrijp hoe een array werkt :)
@Wouter: het ligt denk ik aan de benamingen dat ik het niet helemaal begrijp.
setID() bedoel je daarmee de key van de session? En met setValue, is dat de waarde die je toekent aan die ID?
in platte code, is wat jij doet:
$_SESSION['foo'] = 'lorem ipsum';
?
@Wouter: het ligt denk ik aan de benamingen dat ik het niet helemaal begrijp.
setID() bedoel je daarmee de key van de session? En met setValue, is dat de waarde die je toekent aan die ID?
in platte code, is wat jij doet:
$_SESSION['foo'] = 'lorem ipsum';
?
Lol dat is toch precies wat ik net ook zei???
Omdat dat iets heel anders is? Die onderste code zou een functie van de SessionManager kunnen zijn en die bovenste van de Session object.
Laten we het even anders doen en alle bovenstaande voorbeelden compleet vergeten.
Ik heb een website. De bezoeker typt in een formulier zijn naam in, 'Piet'.
Deze naam wil ik nu in een sessie zetten. Hoe zou je dat dan doen, gebruikmakend van de Session class en SessionManager class. Ik zal laten zien wat ik (simplistisch) vroeger deed:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
session_start();
$user = $_POST['user'];
$session = new Session();
$session->set('user', $user);
echo 'Hallo ' . $session->get('user');
?>
session_start();
$user = $_POST['user'];
$session = new Session();
$session->set('user', $user);
echo 'Hallo ' . $session->get('user');
?>
Hoe zou je dan bovenstaand voorbeeld uitvoeren op jullie manier? Misschien begrijp ik het dan wat beter.
Gewijzigd op 08/01/2013 20:27:58 door Ozzie PHP
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
session_start();
$user = $_POST['user'];
$session = new Session();
$session->setKey('user');
$session->ssetValue($user);
$manager = new SessionManager();
$manager->save($session);
?>
session_start();
$user = $_POST['user'];
$session = new Session();
$session->setKey('user');
$session->ssetValue($user);
$manager = new SessionManager();
$manager->save($session);
?>
Zoiets. De SessionManager is gewoon een extra abstractielaag. De Sessie class is in feite niets meer dan een object met een key en een value. Misschien kan je beter klein beginnen, ik raad je aan deze tutorial(s) eens door te nemen: https://webdevils.nl/articles/2-oop-gastenboek-deel-1-introductie/