Avatar billede freos Nybegynder
24. august 2004 - 14:43 Der er 35 kommentarer og
1 løsning

hjælp med sessions

Sidder og er igang med at lave et login system med sessions og få da også sessions sat hvis jeg tjekker med print_r($_SESSION) inden jeg alver en redirect men når jeg har lavet en redirect så er det somom at session ikke er sat mere da jeg ikke kan se noget af det en logged ind bruger skal kunne se.

Kode: index.php?mode=login:

case login:

    $query = mysql_query("SELECT * FROM usrs WHERE bruger='".$_POST['brugernavn']."'") or die(mysql_error());
    $row = mysql_fetch_assoc($query);

    if($_POST['kodeord'] == $row['pass']) {

        $_SESSION['id'] = session_id();
        $_SESSION['login'] = 'ja';
        $_SESSION['ret'] = $row['ret'];

               
          echo '<script>location.href = "index.php"</script>';

    } else {

        echo 'Error Pass';

    }

break;

include-login.php:

<?
if ($_SESSION['login'] == 'ja') {
?>
<html>
<head>
<script type="text/javascript">

/***********************************************
* Switch Menu script- by Martial B of http://getElementById.com/
* Modified by Dynamic Drive for format & NS4/IE4 compatibility
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/

if (document.getElementById){ //DynamicDrive.com change
document.write('<style type="text/css">\n')
document.write('.submenu{display: none;}\n')
document.write('</style>\n')
}

function SwitchMenu(obj){
    if(document.getElementById){
    var el = document.getElementById(obj);
    var ar = document.getElementById("masterdiv").getElementsByTagName("span"); //DynamicDrive.com change
        if(el.style.display != "block"){ //DynamicDrive.com change
            for (var i=0; i<ar.length; i++){
                if (ar[i].className=="submenu") //DynamicDrive.com change
                ar[i].style.display = "none";
            }
            el.style.display = "block";
        }else{
            el.style.display = "none";
        }
    }
}

</script>
</head>
<table cellpadding='0' cellspacing='0'>
    <tr>
        <td width='500' onMouseOver="this.bgColor='Silver'" onMouseOut="this.bgColor='#ffffff'"><a href='index.php?mode=my_page'>My Page</a></td>
    </tr>
    <tr>
        <td width='500' onMouseOver="this.bgColor='Silver'" onMouseOut="this.bgColor='#ffffff'">
<div id="masterdiv">
            <div onclick="SwitchMenu('sub1')"><a href='#'>Manage News</a></div>
            <span class="submenu" id="sub1">
            - <a href="index.php?mode=add_news">Add nyhed</a><br>
            - <a href="index.php?mode=edit_news">Edit nyhed</a><br>
            - <a href="index.php?mode=delete_news">Delete nyhed</a><br>
            </span>
        </td>
    </tr>
    <tr>
        <td width='500' onMouseOver="this.bgColor='Silver'" onMouseOut="this.bgColor='#ffffff'">
            <div onclick="SwitchMenu('sub2')"><a href='#'>Manage Matches</a></div>
            <span class="submenu" id="sub2">
            - <a href="index.php?mode=add_match">Add match</a><br>
            - <a href="index.php?mode=edit_match">Edit match</a><br>
            - <a href="index.php?mode=delete_match">Delete match</a><br>
            </span>
        </td>
    </tr>
    <tr>
        <td width='500' onMouseOver="this.bgColor='Silver'" onMouseOut="this.bgColor='#ffffff'">
            <div onclick="SwitchMenu('sub3')"><a href='#'>Manage History</a></div>
            <span class="submenu" id="sub3">
            - <a href="index.php?mode=add_history">Add history</a><br>
            - <a href="index.php?mode=edit_history">Edit history</a><br>
            - <a href="index.php?mode=delete_history">Delete history</a><br>
            </span>
        </td>
    </tr>
    <tr>
        <td width='500' onMouseOver="this.bgColor='Silver'" onMouseOut="this.bgColor='#ffffff'">
            <div onclick="SwitchMenu('sub4')"><a href='#'>Manage Tagwall</a></div>
            <span class="submenu" id="sub4">
            - <a href="index.php?mode=delete_tagwall">Delete tagwall</a><br>
            </span>
        </td>
    </tr>
    <tr>
        <td width='500' onMouseOver="this.bgColor='Silver'" onMouseOut="this.bgColor='#ffffff'">
            <div onclick="SwitchMenu('sub5')"><a href='#'>Manage Sponsors</a></div>
            <span class="submenu" id="sub5">
            - <a href="index.php?mode=add_sponsor">Add sponsor</a><br>
            - <a href="index.php?mode=edit_sponsor">Edit sponsor</a><br>
            - <a href="index.php?mode=delete_sponsor">Delete sponsor</a><br>
            </span>
        </td>
    </tr>
    <tr>
        <td width='500' onMouseOver="this.bgColor='Silver'" onMouseOut="this.bgColor='#ffffff'">
            <div onclick="SwitchMenu('sub6')"><a href='#'>Manage Links</a></div>
            <span class="submenu" id="sub6">
            - <a href="index.php?mode=add_link">Add link</a><br>
            - <a href="index.php?mode=edit_link">Edit link</a><br>
            - <a href="index.php?mode=delete_link">Delete link</a><br>
            </span>
        </td>
    </tr>
    <tr>
        <td width='500' onMouseOver="this.bgColor='Silver'" onMouseOut="this.bgColor='#ffffff'">
            <div onclick="SwitchMenu('sub7')"><a href='#'>Manage War Types</a></div>
            <span class="submenu" id="sub7">
            - <a href="index.php?mode=add_wartype">Add war type</a><br>
            - <a href="index.php?mode=edit_wartype">Edit war type</a><br>
            - <a href="index.php?mode=delete_wartype">Delete war type</a><br>
            </span>
        </td>
    </tr>
    <tr>
        <td width='500' onMouseOver="this.bgColor='Silver'" onMouseOut="this.bgColor='#ffffff'">
            <div onclick="SwitchMenu('sub8')"><a href='#'>Manage Uploads</a></div>
            <span class="submenu" id="sub8">
            - <a href="index.php?mode=upload_picture">Upload Picture</a><br>
            - <a href="index.php?mode=delete_picture">Delete Picture</a><br>
            </span>
</div>
        </td>
    </tr>
</table>

<?
}
else
{
?>
<form method='post' action='index.php?mode=login'>
<table cellpadding='0' cellspacing='0'>
    <tr>
        <td>Username:</td><td><input type='text' name='brugernavn' size='12'></td>
    </tr>
    <tr>   
        <td>Password:</td><td><input type='password' name='kodeord' size='12'></td>
    </tr>
    <tr>
        <td></td><td><input type='submit' value='  Login  '></td>
    </tr>
</table>
</form>
<?
}
?>
Avatar billede dennismp Nybegynder
24. august 2004 - 14:51 #1
Der skal stå session_start() i alle scripts der benytter sessions. Er du sikker på det sker ?
Avatar billede freos Nybegynder
24. august 2004 - 14:53 #2
jeg har session_start() i starten af index.php som kalder include-login.php hvis det er det du mener
Avatar billede dennismp Nybegynder
24. august 2004 - 15:00 #3
hmm.. bruger du webhotel eller egen installation? Hvis du bruger egen installation, så prøv at se i php.ini og sørg for at session.save_path er sat til noget fornuftigt. Det kan være den ikke kan få gemt session'en..

Hvis det ikke er din installation. Så prøv at lave en testfil: fx.

<?php
session_start();
if( isset($_SESSION['count']))
  $num = $_SESSION['count'];
else
  $num = 0;
$num++;
print "Num = $num<br>";
?>

Prøv at reload siden - tæller den op?
Avatar billede freos Nybegynder
24. august 2004 - 15:04 #4
det er ikke min egen installation da jeg sidder oppe på skolen og laver det.

og nej den tæller ikke op når jeg reloader den test side
Avatar billede dark-devil Nybegynder
24. august 2004 - 15:06 #5
Nogle webhoteller tager ikke imod session_start();.

Jeg synes, også!  - det er lamt.
Avatar billede freos Nybegynder
24. august 2004 - 15:08 #6
det sjove ved det er at der bliver lavet sessions. (jeg er administrator så kan kigge i session.Save_path) der bliver lavet 2 filer for vær gang jeg køre igennem index?mode=login
Avatar billede freos Nybegynder
24. august 2004 - 15:08 #7
index.php?mode=login skulle det være
Avatar billede dennismp Nybegynder
24. august 2004 - 15:08 #8
Så er det ikke din kode det er galt med - det er vel en god ting :).

prøv at bruge session_save_path('/tmp/'); hvis det er et unix system
eller session_save_path('c:/tmp/'); hvis det er et windows system.

Du kan bruge testfilen igen. Bare smid session_save_path ind foran session_start.
Avatar billede dennismp Nybegynder
24. august 2004 - 15:11 #9
Ok, så den laver filerne.. Hmm.. Kan det mon være noget med cookies der ikke kommer frem og tilbage. Har du forsøgt at sætte din browser til at vise en warning ved alle cookies ? Så du kan se om du får sat nogen.. (evt lige lukke browseren ned - så du starter på en frisk).
Avatar billede freos Nybegynder
25. august 2004 - 09:10 #10
har ikke adgang til at lave noget om med cookies selv om jeg er administrator (spørg ikke hvorfor vores policy er sådan) plus jeg prøvede at logge ind på siden der hjemmefra og det virkede heller ikke
Avatar billede dennismp Nybegynder
25. august 2004 - 10:34 #11
Er det muligt for mig at prøve?
Avatar billede freos Nybegynder
25. august 2004 - 10:46 #12
Avatar billede freos Nybegynder
25. august 2004 - 10:46 #13
bruger: admin
pass: admin
Avatar billede dennismp Nybegynder
25. august 2004 - 10:54 #14
session.cookie_path står forkert. Prøv at sætte den til / (Det default'er den til) (enten i php.ini eller med session_set_cookie_params())
Avatar billede freos Nybegynder
25. august 2004 - 11:04 #15
dvs. sådan her?

session_set_cookie_params(0, '/');
session_start();
Avatar billede dennismp Nybegynder
25. august 2004 - 11:11 #16
prøv:
session_set_cookie_params(3600, '/');

eller

ini_set('session.cookie_path','/');
Avatar billede freos Nybegynder
25. august 2004 - 11:15 #17
ingen af dem ser ud til at virke :(
Avatar billede dennismp Nybegynder
25. august 2004 - 11:19 #18
cookie du sætter:
"PHPSESSID=....; expires=Wed, 25-Aug-2004 10:14:25 GMT; path=c:\php\cookie\"

path er stadig ugyldig.. Den er ikke ændret. Husk at det skal gøres på alle sider, før du kalder session_start().. Du kan evt også bruge

.htaccess:
php_value session.cookie_path /

eller bedre rette php.ini :)

Prøv evt at bruge:
ini_get('session.cookie_path'); eller phpinfo() for at se om du rent faktisk har ændret værdien.

Eller du kan smide een af de to (session_Set_cookie_params(..) eller ini_set() ) ind i test-filen og se om det gør nogen forskel.
Avatar billede freos Nybegynder
25. august 2004 - 11:23 #19
mappen c:\php\cookie\ findes på serveren

og der er ingen forskel i test filen uanset hvilken af de 2 jeg smider ind i den. det virker ikke :(

og kalder kun session_start() et sted og det er i starten af index.php da den fil har alt i den
Avatar billede freos Nybegynder
25. august 2004 - 11:26 #20
http://udvikling.todoonada.dk/jaan/egen%20hp/wee/test.php <-- test filen med ini_set('session.cookie_path','/'); og phpinfo() i den
Avatar billede dennismp Nybegynder
25. august 2004 - 11:30 #21
har du prøvet med ini_get for at se om den rent faktisk bliver rettet?

Cookie-path virker ikke som du forventer :) cookie-path fortæller browseren hvornår cookien skal sendes til webserveren.

dvs

http://www.minhjemmeside.dk

hvis du har en cookiepath der er / .. så vil den altid blive sendt. Hvis du derimod sætter den til /test/ .. så vil det kun være urls med
http://www.minhjemmeside.dk/test/ der får cookien. Du sætter den til:
c:\php\cookie\ - så det er kun når du er inde i et directory der hedder det, browseren vil sende cookien.

Prøv evt at se på denne side. I tabel 1 står der lidt om "path"
http://dk2.php.net/setcookie
Avatar billede freos Nybegynder
25. august 2004 - 12:01 #22
undskyld men der røg jeg af tråden...
Avatar billede dennismp Nybegynder
25. august 2004 - 12:10 #23
cookie-path er ikke noget om serveren. cookie-path fortæller browseren hvornår den skal sende cookien og hvornår den ikke skal.

Hvis cookie-path står til / så bliver den altid sendt til domænet. Hvis cookie-path står til /test .. så vil cookien kun blive sendt, når browseren er i /test eller derunder. Derfor giver det ikke nogen mening at den er c:\php\cookie..

Har du mulighed for at rette din php.ini ? Det ser nemlig ud til at du har sat den som den skal, men php bruger stadig værdien fra ini'en (ved ikke hvorfor).
Avatar billede freos Nybegynder
25. august 2004 - 12:12 #24
har mulighed for det da jeg er administrator men tror ikke min værkføre bliver så glad hvis jeg gør det
Avatar billede dennismp Nybegynder
25. august 2004 - 12:15 #25
Kan du så se om den står til c:\php\cookie i php.ini'en ?
Har du mulighed for at afprøve det ? (ændre det midlertidigt, for at se om det er det, der er problemet?)
Avatar billede freos Nybegynder
25. august 2004 - 12:17 #26
har lige været inde i php.ini og der står: session.cookie_path = c:\php\cookie

men kan ikke lave det om midlertidigt da det jo kræver genstart af IIS og jeg er ikke den eneste der sidder og bruger den lige nu
Avatar billede dennismp Nybegynder
25. august 2004 - 12:21 #27
Hvad står session.auto_start til?
Avatar billede freos Nybegynder
25. august 2004 - 12:24 #28
session.auto_start = 1 står der i php.ini
Avatar billede dennismp Nybegynder
25. august 2004 - 12:28 #29
Så er det derfor din session_set_cookie_params og ini_set ikke virker. Session'en bliver startet før din kode kan nå at ændre værdien af session.cookie_path. Den rigtige løsning var at sætte session.cookie_path til noget fornuftigt.

Har du forsøgt med .htaccess ?
Avatar billede freos Nybegynder
25. august 2004 - 12:29 #30
nej kender nemlig intet til .htaccess
Avatar billede dennismp Nybegynder
25. august 2004 - 12:42 #31
Ah glem det :) IIS har ikke .htaccess alligevel.

Du kan prøve at tilføje:
setcookie ( session_name(), session_id(), 0, '/' );
eller blot
setcookie ( session_name(), session_id() );

Men det ville være langt bedre hvis i fik rettet jeres php.ini, så det burde du hellere bruge tid på - hvis jeg skulle bestemme :)
Avatar billede freos Nybegynder
25. august 2004 - 12:44 #32
skal setcookie sættes i starten af index.php eller lige inden den laver redirect i index.php?mode=login?
Avatar billede freos Nybegynder
25. august 2004 - 12:46 #33
ok i starten og det virker :D
Avatar billede freos Nybegynder
25. august 2004 - 12:49 #34
smider du et svar? :D
Avatar billede dennismp Nybegynder
25. august 2004 - 12:50 #35
Nu sætter php så to cookies.. Een fordi auto_start er sat til (og den forsøger at sætte en ugyldig cookie - folk som mig, vil få en warning hver gang du sætter den.. hvilket nok blive liidt belastende) og så den anden (som virker, fordi vi sætter den manuelt)..

Du skal bare lave set-cookien på alle sider hvor du bruger sessions. Mne det er en skidt løsning :)

Du får lige et svar
Avatar billede freos Nybegynder
25. august 2004 - 12:52 #36
sætter også selv en apache server op derhjemme og laver den hvor jeg ikke selv skal sætte cookien. den løsning skal bare bruges så længe jeg laver det i skolen
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