Toon posts:

[CFML] Session werkt niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik ben bezig met een beveiligde CMS pagina. Hierbij maak ik gebruik van een SESSION. Deze wordt automatisch wegeknikkerd na 20 minuten geen interactie, of wanneer de gebruiker op 'uitloggen' klikt. Het wegknikkeren (dus verplichten tot opnieuw inloggen) werkt wel, maar het vreemde is dat hij altijd dezelfde sessie behoudt:

code:
1
2
CFID=53
CFTOKEN=71794019



Weet iemand wat ik fout doe?


De code op de inlogpagina is

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<CFIF #form.inlognaam# neq '' and #form.wachtwoord# neq ''>
        <CFQUERY DATASOURCE="egpn" NAME="GetUserRecord">
            SELECT * 
            FROM admintoegang
            WHERE   Inlognaam = '#FORM.inlognaam#' AND  Wachtwoord= '#FORM.wachtwoord#'
        </CFQUERY> 
    
        <CFIF #getuserrecord.recordcount# eq 1>
            <CFLOCK SCOPE="SESSION" TIMEOUT="1" TYPE="EXCLUSIVE">
                <CFSET session.rechten = "true">
                <CFSET session.loginnaam = #getuserrecord.inlognaam#>
                <CFSET session.gebruikers_id = #getuserrecord.userid#>
            </CFLOCK>
                    
            <CFINCLUDE TEMPLATE="adminframe.cfm">
            <!--- De frameset voor de beveiligde CMS site  -->

        <CFELSE>
            <tt>U bent niet gemachtigd om deze pagina te bekijken.</tt>
        </CFIF>



Op iedere pagina staat in de HEAD

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<CFOUTPUT>
    <CFIF not IsDefined("sessie_verlopen_sec")>
        <cflock scope="session" timeout="1" type="readonly">
        <META HTTP-EQUIV="refresh" CONTENT="#session.sessie_verlopen_sec#;URL=intranet.cfm?wis_sessie=1">
        </cflock>
    </CFIF>
</CFOUTPUT>
<cflock scope="session" timeout="1" type="readonly">
    <cfoutput>
        <cfif not isDefined("session.loginnaam")>
            <meta http-equiv="refresh" content="inloggen.cfm">
        </cfif>
    </cfoutput>
</cflock>



En in de APPLICATION.CFM (die hij automatisch aanroept doordat er met een session wordt gewerkt) staat deze code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<CFSET dag = 0>
<CFSET uur = 0>
<CFSET min = 20>
<CFSET sec = 0>

<CFAPPLICATION 
SESSIONTIMEOUT = #CreateTimeSpan(dag,uur,min,sec)# 
SESSIONMANAGEMENT="Yes"  
SETCLIENTCOOKIES="No"
NAME="egpnApp">

<cflock scope="SESSION" timeout="1" type="EXCLUSIVE">
    <CFSET session.server = CGI.http_host>
</cflock>

<cflock scope="session" type="EXCLUSIVE" timeout="1">
    <CFSET session.sessie_verlopen_sec=1+sec+min*60+uur*3600+dag*86400>
</cflock>



De uitlogpagina is dit:

code:
1
2
3
4
5
 <cflock TimeOut="1" scope="SESSION" type="EXCLUSIVE">
    <cfset Structclear(Session,"loginnaam")>
    <cfset Structclear(Session,"sessie_verlopen_sec")>
 </cflock>
<cflocation url="inloggen.htm">

  • jochemd
  • Registratie: November 2000
  • Laatst online: 31-08 19:19
Als ik het goed begrepen hebis het probleem dat ColdFusion de cookies voor CFID en CFToken als cookies die expiren in 2000-veel zet. Je zal dus even in je Application.cfm (let op de hoofdletter!) zelf cookies voor CFID en CFToken moeten zetten. En daarbij dus geen expires attribuut gebruiken.

Verder hoop ik dat je niet bedoelt dat de cookies het zelfde blijven als de browser tussendoor niet afgesloten wordt, want dan moet je nog even de documentatie van cookies er bij pakken.

En tot slot: denk nog eens goed na over het verschil tussen client side en server side. Bedenk bijvoorbeeld eens wat er gebeurt als ik mijn browser zo instel dat die een <meta htt-equiv> negeert.

Verwijderd

Topicstarter
Er wordt niet met cookies gewerkt. Bij sessions worden, volgens mijn cfboek, de variabelen (cfid en cftoken) weggeschreven naar het RAM geheugen van de server. En die worden blijkbaar niet helemaal gewist ofzo ?! :?

wat betreft het http-equiv: die staat er nog om te testen of het werkt, daar bedenk ik nog een 'server side' oplossing voor. :)

  • jochemd
  • Registratie: November 2000
  • Laatst online: 31-08 19:19
Boek misschien even opnieuw doornemen. Op de een of andere manier moet je om statefull te kunnen werken met welk request een CFID en CFToken meesturen. Ik neem aan dat je het gezegd zou hebben als je dat over de URL of via een form doet, het is namelijk vrij relevant, dus blijven cookies over.

Verwijderd

Topicstarter
Oeps. Door de hele site worden de CFId en CFToken variabelen verstuurd door de URL:
code:
1
<A HREF="home.cfm?#session.urltoken#>blablabla</A>

Dit is gedaan zodat het ook werkt als cookies uitstaan.

Maar dan nog zou hij de session weg moeten gooien me:
code:
1
Structclear(Session,"loginnaam")


Denk jij dat het beter is om cookies te gebruiken??

  • jochemd
  • Registratie: November 2000
  • Laatst online: 31-08 19:19
Met de code dioe jij hebt gooi je alleen de loginnaam weg. Niet de sessie.

Verwijderd

Topicstarter
Ik heb er nu dit van gemaakt
code:
1
2
3
<CFLOCK TIMEOUT="30" NAME="#Session.SessionID#" TYPE="EXCLUSIVE">
    <CFSET StructClear(Session)>
</CFLOCK>

Dus dat moet de hele sessie weggooien. Dat doet-ie ook, op de vervolgpagina komen er allemaal foutmeldingen waar ik een link had staan <A HREF="bla.cfm?#session.urltoken#"></A> maar dat maakt niet uit.

Maar als ik de browser afsluit en de pagina opnieuw open dan doet alles het weer en heeft ie nog steeds hetzelfde CFID en CFTOKEN nummer.

CFID=53
CFTOKEN=71794019

  • jochemd
  • Registratie: November 2000
  • Laatst online: 31-08 19:19
Cookies zeg ik toch. Dump de cgi scope eens naar het scherm, dan zie je het vanzelf.
Pagina: 1