Avatar billede kiwankow Nybegynder
28. september 2009 - 18:51 Der er 37 kommentarer og
1 løsning

Hvordan navngiver man en session

Hej

Er der nogen der kan fortælle mig hvordan man navngiver en session i php, og efterfølgende hvordan man kan tjekke navnet i stil med følgende:

If sessionname = ex.
then
else
Avatar billede arne_v Ekspert
28. september 2009 - 19:07 #1
$_SESSION['name'] = 'foobar';

??
Avatar billede danco Nybegynder
28. september 2009 - 21:01 #2
Hvad skal du bruge det til ? Er det en form for login eller ?
Avatar billede kiwankow Nybegynder
28. september 2009 - 21:30 #3
Lige præcis. Jeg har allerede et fint login script men problemet er at jeg bruger det på flere forskellige hjemmesidersom alle ligger på samme server. Hvis jeg logger ind på hjemmeside1 kan jge få adgang til hjemmeside2 uden at logge ind selvom brugernavn og password er forskellige. Det duer jo ikke rigtig, og jeg mangler virkelig en løsnin på problemet.
Avatar billede danco Nybegynder
28. september 2009 - 21:43 #4
Kunne du så ikke bare bruge en

$_SESSION[brugernavn]=$_GET['brugernavn'];
Avatar billede kiwankow Nybegynder
28. september 2009 - 21:55 #5
jeg er ikke helt med på hvad du mener
Avatar billede kiwankow Nybegynder
28. september 2009 - 21:57 #6
Hvor skal det sættes ind..??
Jeg har brugernavn som $admin gemt i variable.php
Avatar billede danco Nybegynder
28. september 2009 - 22:07 #7
Altså, du laver en if else statement:

if(//her tjekker du om kode ord er korrekt)
{
$_SESSION[Brugernavn]=$_GET[brugernavn];
}
else
{
echo "Du er ikke logget ind";
}

Jeg bruger GET fordi jeg ikke ved hvordan du ellers overfører dine variabler, og til det er GET det man ser oftest brugt.
Det du gør er at du sætter din session (Brugernavn) til at være det samme brugeren indtastede hvis det er korrekt, hvis det ikke er korrekt skriver den bare ud at man ikke er logget ind.
Avatar billede danco Nybegynder
28. september 2009 - 22:16 #8
Nej undskyld, jeg skriver da noget forfærdeligt vrøvl,
Det holder jo ingensteder.

<?php

$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
$tbl_name=""; // Table name

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$myusername=$_POST['brugernavn'];
$mypassword=$_POST['password'];

$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

$count= mysql_num_rows($result);

if($count==1){
session_register("myusername");
session_register("mypassword");
//Hvor skal brugerens sendes videre til?
header("location:bruger.php");
}
else {
echo "Forkert Brugernavn eller Kodeord";
}
?>
Avatar billede kiwankow Nybegynder
28. september 2009 - 22:18 #9
Jeg viser dig lige min kode i håbet om at du gider se på det. :-)

koden består af 3 filer:


tilpas.php (som er den side der kræver logind) har denne kode øverst på siden:
--------------------
<?php
session_start();
if(!$_SESSION['login'])
header("Location: login.php");
?>


Login.php
--------------
<?php
include("variable.php");
?>
<?php
session_start();
if($_SESSION['login'])
header("Location: tilpas.php");
$username = trim($_POST['username']);
$password = trim($_POST['password']);
if(!empty($username) AND !empty($password)) {
$ok_user = $admin;
$ok_pass = $pass;
if($username == $ok_user AND $password == $ok_pass) {
$_SESSION['login'] = 1;
header("Location: tilpas.php");
} else {
$login_error = 1;
}
} else {
$login_error = 1;
}
?>

<?php
if($login_error) {
// For sikkerhedens skyld, så afslør aldrig HVAD der er galt
// men blot at der er en fejl med brugernavn og/eller passsword.
echo "<br /><br /><center><b>Kun adgang med korrekt brugernavn og password</b></center>";
}
?>


logout.php
---------------
<?php
session_start();
session_destroy();
header("Location: index.php");
?>
Avatar billede kiwankow Nybegynder
28. september 2009 - 22:19 #10
Jeg bruger ikke database, men gemmer $admin i en fil variable.php og derfor inkluderer jeg denne fil.
Avatar billede olebole Juniormester
28. september 2009 - 23:55 #11
<ole>

Mon ikke det ville være en rigtig god idé at forholde sig til de to tråde om emnet, du allerede har kørende:
    http://www.eksperten.dk/spm/887754
    http://www.eksperten.dk/spm/887300

Klædeligt ville det i hvertfald være ... og det kunne måske endda øge dine chancer for hjælp  ;o)

/mvh
</bole>
Avatar billede dkfire Nybegynder
28. september 2009 - 23:55 #12
Du kan jo bruge dir(__FILE__) eller $_SERVER['SERVER_NAME'] til at skelne mellem de forskellige sider.
Du skal bruge dem alt efter hvordan de to filer ligger i forhold til hinanden. Hvis de ligger i samme mappe så:


tilpas.php :

<?php
session_start();
if(!$_SESSION['login'] && ($_SESSION['SITE'] != dirname(__file__)))
header("Location: login.php");
?>

Login.php:

....
if($_SESSION['login'] && ($_SESSION['SITE'] == dirname(__FILE__)))
header("Location: tilpas.php");
....
if($username == $ok_user AND $password == $ok_pass) {
$_SESSION['login'] = 1;
$_SESSIOM['SITE'] = dirname(__FILE__);
header("Location: tilpas.php");
exit();
}
...


Kan være en ide, som jeg i alle dine andre spørgsmål om samme emne har prøvet at forklare dig.
Du bør, før du går videre læst om session og array, da det ikke lader til du har megen kendskab til de to dele.
Avatar billede repox Seniormester
29. september 2009 - 08:59 #13
Udover at olebole har ret i at det ville klæde dig gevaldigt at gøre dine øvrige spørgsmål færdige, lyder det som om at det er fordi du ikke ved hvad du laver.

Det scenarie du beskriver vil implicit medføre at du - ved at sætte en session på dit 'webhotel' - kan besøge andres 'webhoteller' på den samme server og dermed tvinge dig adgang til deres session baserede systemer; men sådan fungerer det ikke.

En session - som standard - genkendes via en cookie, sat i klientens browser. Browseren vil, for det rette domæne sende det pågældende session id med til serveren, hvor PHP vil hente de oplysninger frem der er tilknyttet det session id.

Kort fortalt, den session du sætter på example.org kan ikke være den samme som du sætter på example.com. Det er din kode der fejler og har ikke noget med sessions at gøre.
Avatar billede kiwankow Nybegynder
29. september 2009 - 10:44 #14
dkfire: med den kode du skriver går den direkte videre helt uden at spørge efter login

repox: som du selv siger kan session ikke være den samme, men så kan man vel også gøre dem forskellige med forskellige navne eller hvad..??
Avatar billede dkfire Nybegynder
29. september 2009 - 11:11 #15
repox: Spørgerens problem er at vedkommende har flere hjemmeside i forskellige mapper, men under samme webhotel under et domæne. Derfor ikke forskellig session.

kiwankow: jeg havde lavet et par fejl:

tilpas.php :

<?php
session_start();
if(!$_SESSION['login'] || ($_SESSION['SITE'] != dirname(__file__))){
header("Location: login.php");
exit();
}
?>

Login.php:

....
if($_SESSION['login'] == 1 && ($_SESSION['SITE'] == dirname(__FILE__))){
header("Location: tilpas.php");
exit();
}
....
if($username == $ok_user AND $password == $ok_pass) {
$_SESSION['login'] = 1;
$_SESSIOM['SITE'] = dirname(__FILE__);
header("Location: tilpas.php");
exit();
}
...


Tror det vil være en god ide at vise din mappe struktur.
Avatar billede repox Seniormester
29. september 2009 - 11:22 #16
#15
ahh, okay...
Ja, så ville den oplagte løsning være at bruge et multidimensionelt array i sine sessions.

login.php

<?php

  ...
  $_SESSION["site1"]["login"] = 1;
  ...
?>


tilpas.php

<?php
  session_start();
  if(!isset($_SESSION["site1"]["login"]))
  {
    header("Location: login.php");
    exit;
  }
?>
Avatar billede kiwankow Nybegynder
29. september 2009 - 11:33 #17
dkfire:

nu logger den slet ikke ind mere, nu bliver den bare på logind.php hele tiden.
Avatar billede dkfire Nybegynder
29. september 2009 - 12:19 #18
Efter som du endnu ikke har givet vist din mappe struktur, samt hvor de to filer ligger henne, så har jeg svært ved har hjælpe dig.

Hvordan ser din kode ud nu ?
Avatar billede kiwankow Nybegynder
29. september 2009 - 13:43 #19
public_html/Externalsites/side1,
public_html/Externalsites/side2,
public_html/Externalsites/side3 osv.

Jeg håber det var det du mente :-)

tilpas.php har dette øverst i koden
--------------------------------------
<?php
session_start();
if(!$_SESSION['login'] || ($_SESSION['SITE'] != dirname(__file__))){
header("Location: login.php");
exit();
}
?>

login.php
-----------------------------------
<?php
session_start();
if($_SESSION['login'] == 1 && ($_SESSION['SITE'] == dirname(__FILE__))){
header("Location: tilpas.php");
exit();
}
$username = trim($_POST['username']);
$password = trim($_POST['password']);
if(!empty($username) AND !empty($password)) {
$ok_user = $admin;
$ok_pass = $pass;
if($username == $ok_user AND $password == $ok_pass) {
$_SESSION['login'] = 1;
$_SESSIOM['SITE'] = dirname(__FILE__);
header("Location: tilpas.php");
exit();
} else {
$login_error = 1;
}
} else {
$login_error = 1;
}
?>


<?php
if($login_error) {
// For sikkerhedens skyld, så afslør aldrig HVAD der er galt
// men blot at der er en fejl med brugernavn og/eller passsword.
echo "<br /><br /><center><b>Kun adgang med korrekt brugernavn og password</b></center>";
}
?>

<center>
<br /><br /><br /><br />
<form action="login.php" method="post">
Brugernavn: <input type="text" name="username"><br />
&nbsp;&nbsp;Password: <input type="password" name="password"><br /><br />
<input type="submit">
</form>
</center>

Og tusind tak fordi du gider hjælpe mig så meget :-)
Avatar billede kiwankow Nybegynder
29. september 2009 - 13:45 #20
hov for der ikke kommer nogen misforståelser er side1,side2,side3 allesammen mapper hvori der ligger index.php,variable.php,login.php,logout.php og tilpas.php
Avatar billede dkfire Nybegynder
30. september 2009 - 19:34 #21
Så er der jo ikke andet for end at du skal lave lidt debuging.
Du bliver nød til at skrive så mange variabler ud som mulig for har se hvad der går galt.

Det kunne være noget ala:
tilpas.php

<?php
session_start();
if(!$_SESSION['login'] || ($_SESSION['SITE'] != dirname(__file__))){
    echo "Session login = ".$_SESSION['login'];
    echo "Session SITE = ".$_SESSION['SITE'];
    echo "Mappe er: ".dirname(__FILE__);
    //header("Location: login.php");
    exit();
}
?>


login.php

<?php
session_start();
if($_SESSION['login'] == 1 && ($_SESSION['SITE'] == dirname(__FILE__)))
{
    header("Location: tilpas.php");
    exit();
}
$username = trim($_POST['username']);
$password = trim($_POST['password']);
if(!empty($username) AND !empty($password))
{
    $ok_user = $admin;
    $ok_pass = $pass;
    if($username == $ok_user AND $password == $ok_pass)
    {
        $_SESSION['login'] = 1;
        $_SESSIOM['SITE'] = dirname(__FILE__);
        echo "Session login = ".$_SESSION['login'];
        echo "Session SITE = ".$_SESSION['SITE'];
        //header("Location: tilpas.php");
        exit();
    }else
    {
        $login_error = 1;
    }
} else {
    $login_error = 1;
}
?>

Se på hvad den siger til dig. Når du logger ind, så bliver du nød til selv at gå til tilpas.php.
Avatar billede kiwankow Nybegynder
30. september 2009 - 20:07 #22
Tilpas.php kommer med denne melding:
------------------------------------

Session login = Session SITE = Mappe er: /home/public_html/Externalsites/side1


Med login.php sker der ingenting
Avatar billede kiwankow Nybegynder
30. september 2009 - 20:11 #23
hvis jeg inkluderer variable.php først i login.php kommer den med denne melding:

Session login = 1Session SITE =
Avatar billede dkfire Nybegynder
30. september 2009 - 20:52 #24
En ting skal da ændres kan jeg se:

tilpas.php

<?php
session_start();
if(!$_SESSION['login'] || ($_SESSION['SITE'] != dirname(__FILE__))){
    echo "Session login = ".$_SESSION['login'];
    echo "Session SITE = ".$_SESSION['SITE'];
    echo "Mappe er: ".dirname(__FILE__);
    //header("Location: login.php");
    exit();
}
?>

Og så er der jo lige en stavefejl, som du også bør se selv.
$_SESSIOM -> $_SESSION ( et M skal rettes til N )
Avatar billede kiwankow Nybegynder
30. september 2009 - 21:03 #25
tilpas.php kommer stadig med:

Session login = Session SITE = Mappe er: /home/public_html/Externalsites/side1

og login.php:

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/public_html/Externalsites/side1/login.php:5) in /home/public_html/Externalsites/side1/login.php on line 6
Avatar billede dkfire Nybegynder
30. september 2009 - 21:19 #26
Nu har du jo lavet noget ged, da du har skrevet noget ud til browseren før du kalder session_start().

Du skal selvfølgelig først logge ind rigtig, og så kan du gå til tilpas.php.
Avatar billede kiwankow Nybegynder
30. september 2009 - 21:20 #27
hov min fejl.

login.php:

Session login = 1Session SITE = Mappe er: /home/public_html/Externalsites/side1
Avatar billede dkfire Nybegynder
30. september 2009 - 21:33 #28
Nu kan login.php ummulig skrive det du skriver, da jeg ikke har skrevet noget med "Mappe er ...".
Vis igen din kode for de to filer.
Husk dog på at du bør lukke din browser hver gang du har først dit script, ellers dræbes sessionen ikke.
Avatar billede dkfire Nybegynder
30. september 2009 - 21:47 #29
Følgende virker hos mig:

tilpas.php

<?php
session_start();
if(!$_SESSION['login'] || $_SESSION['SITE'] != dirname(__FILE__)){
    echo "Session login = ".$_SESSION['login'];
    echo "Session SITE = ".$_SESSION['SITE'];
    echo "Mappe er: ".dirname(__FILE__);
    //header("Location: login.php");
    exit();
}else {
    echo "Du er skam logget ind";
}

?>


login.php

<?php
session_start();
if(isset($_SESSION['login']) && $_SESSION['login'] == 1 && $_SESSION['SITE'] == dirname(__FILE__))
{
    header("Location: tilpas.php");
    exit();
}

if(isset($_POST['username']) && !empty($_POST['username']) AND !empty($_POST['password']))
{
    $username = trim($_POST['username']);
    $password = trim($_POST['password']);
    $ok_user = "admin";
    $ok_pass = "pass";
    if($username == $ok_user AND $password == $ok_pass)
    {
        $_SESSION['login'] = 1;
        $_SESSION['SITE'] = dirname(__FILE__);
        echo "Session login = ".$_SESSION['login'];
        echo "Session SITE = ".$_SESSION['SITE'];
        //header("Location: tilpas.php");
        exit();
    }else
    {
        $login_error = 1;
    }
} else {
    $login_error = 1;
}
?>


<?php
if($login_error) {
// For sikkerhedens skyld, så afslør aldrig HVAD der er galt
// men blot at der er en fejl med brugernavn og/eller passsword.
echo "<br /><br /><center><b>Kun adgang med korrekt brugernavn og password</b></center>";
}
?>

<center>
<br /><br /><br /><br />
<form action="login.php" method="post">
Brugernavn: <input type="text" name="username"><br />
&nbsp;&nbsp;Password: <input type="password" name="password"><br /><br />
<input type="submit">
</form>
</center>

Avatar billede kiwankow Nybegynder
30. september 2009 - 21:53 #30
Jeg fandt en meget mere enkel løsning på problemet, jeg inkluderer jo alligevel variable.php så i stedet for
$_SESSION['login'] bruger jeg bare $_SESSION['<?=$sessionname?>']

Nu mangler jeg bare en måde hvorpå jeg kan angive $sessionname til at være /home/public_html/Externalsites/side1

Jeg har prøvet med $sessionname    = dirname(__FILE__); men det virkede desværre ikke
Avatar billede kiwankow Nybegynder
30. september 2009 - 21:57 #31
Jeg prøvede med $_SESSION['<?=$pass?>'] istedet for
$_SESSION['login'] og det virkede som det skulle, men alligevel kan det jo godtske at nogen laver samme password selvom det er ret usansynligt.
Så hvis du kan fortælle mig hvordan jeg kan angive en variabel til at være mappestrukturen så ville det være super, hvis man altså kan det..??

Jeg har prøvet med $sessionname    = dirname(__FILE__); men det virkede desværre ikke
Avatar billede dkfire Nybegynder
30. september 2009 - 22:37 #32
Jamen, tag nu den løsning jeg har givet dig.
Ud over det så er det du skriver, $_SESSION['<?=$sessionname?>'], så meget forkert, at det lyser langt væk at du skal starte forfra med php. Du kan jo slet ikke håndtere arrays eller variabler.

Jeg har testet min løsning på en server med "forskellige" hjemmesider i hver sin mappe og det virker.
Avatar billede kiwankow Nybegynder
30. september 2009 - 23:52 #33
Det virker ikke på min server, når jeg forsøger at logge ind står den bare og loader og kommer aldrig frem med login.php, hvis jeg går direkte ind på login.php og logger ind så står den også bare og loader uden der skere noget som helst i flere minutter..
Avatar billede kiwankow Nybegynder
01. oktober 2009 - 00:05 #34
Fik det til at virke ved at rette til følgende:

tilpas.php
----------------------
<?php
session_start();
if(!$_SESSION['login'] || $_SESSION['SITE'] != dirname(__FILE__))
header("Location: login.php");
?>


login.php
-----------------------
<?php
include("variable.php");
?>
<?php
session_start();
if(isset($_SESSION['login']) && $_SESSION['login'] == 1 && $_SESSION['SITE'] == dirname(__FILE__))
    header("Location: tilpas.php");

    $username = trim($_POST['username']);
    $password = trim($_POST['password']);
if(isset($_POST['username']) && !empty($_POST['username']) AND !empty($_POST['password'])){
    $ok_user = $admin;
    $ok_pass = $pass;
    if($username == $ok_user AND $password == $ok_pass){
        $_SESSION['login'] = 1;
        $_SESSION['SITE'] = dirname(__FILE__);
    header("Location: tilpas.php");
    }else{
        $login_error = 1;
    }
} else {
    $login_error = 1;
}
?>
Avatar billede kiwankow Nybegynder
01. oktober 2009 - 00:07 #35
LANGT OM LÆNGE VIRKER DET EFTER HENSIGTEN..!! :-)

Smid et svar så får du point, og en kæmpe tak for din ihærdige indsats. Jeg håber der vil være andre der kan få glæde af det flotte stykke arbejde.

Tusind tak..!! :-)
Avatar billede dkfire Nybegynder
01. oktober 2009 - 09:24 #36
Et svar, men ...

Du mangler at sætte exit(); efter hver gang du kalder header(), lige som jeg har gjort. Bare fordi du kalder header() betyder det ikke at der koden som kommer efter ikke bliver kørt, men det vil exit sørge for den ikke bliver.

Dernæst skal du have flyttet din første brug af $_POST ind i if-løkken´som jeg også har gjort, da du ellers vil tilgå et element i et array som ikke er der, og derfor vil for en Notice om fejl.

Du bør også når du udvikler slå alle fejlbeskeder til, så du har mulighed for selv at rette de fejl som måtte være der.
Du kan sikkert gøre det under setup af din hjemmeside hos din host, ellers kan du slå det til ved at sætte error_reporting(E_ALL); øverst i alle dine php sider.
Avatar billede kiwankow Nybegynder
08. oktober 2009 - 11:22 #37
så opstod der alligevel et problem. Login funktionen virker ikke hvis jeg sætter en URL forward på undermappen og beholder domænet i browserens adresse linje, hvis jeg derimod ikke beholder domænet i browseren men accepterer at den skriver stien til mappen så virker login funktionen godt nok...

Hvordan kan dette rettes..??

Håber du stadig følger med i tråden..!! :-)

Ellers må jeg oprette en ny
Avatar billede kiwankow Nybegynder
08. oktober 2009 - 13:15 #38
Løste det ved bruge basename(dirname(__FILE__)) istedet for bare dirname(__FILE__)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester