Sessions Problem

Stefan Brinkers

Angesehenes Mitglied
Hallihallo!

Habe schon öfters gelesen das Sessions in der URL nicht gut sein sollen.

nun sehe ich allerdings das hier
und frage mich wie ich es schaffen kann, die session id da wegzubekommen.

hab schon versucht die session nur zu starten wenn sich jemand einloggt/eingeloggt ist, das funktioniert aber nicht, die Seite bleibt dann einfach nur weiß.

daher meine Fragen:
- sind session wirklich soooo schlecht?
- gibts noch eine andere Möglichkeit die Sessions für Suchmaschinen nicht sichtbar zu machen (robots.txt??)??
 
Ich setze immer "session.use_only_cookies" (z.B. mit ini_set) auf true. Dadurch funktionieren die Sessions nur wenn der User Cookies nicht deaktiviert hat. Aber dafür wirst du nie Session-IDs in URLs finden.

Und Sessions sind nicht schlecht, ohne Sessions kann man praktisch nicht arbeiten ...
 
danke schonmal,

aber was machst du mit den Leuten die keine Cookies aktiviert haben? Sie bitten die einzuschalten? oder einfach drauf verzichten?

QUOTE Und Sessions sind nicht schlecht, ohne Sessions kann man praktisch nicht arbeiten ...

die Frage sollte auch viel mehr heißen:
sind sessions wirklich soooo schlecht - für Suchmaschinen - ?
smile.gif
 
Also die Leute die Cookies nicht aktiviert haben können einfach ohne Account auf meiner Seite surfen, aber sich nicht einloggen.

Also ... du kannst auch die Session URLs nur für den Google Bot deaktivieren. Mit sowas wie

CODE
if ( $_SERVER['USER_AGENT'] == 'google' ) {
ini_set( 'use_only_cookies', 'true' );
}


So ungefähr! (Wird aber nicht so funktionieren ...
tongue.gif
)

 
also momentan siehts so aus, funktioniert aber nicht...

CODE
<?php
 session_cache_limiter('private, must-revalidate');
 session_save_path('ses');

ini_set( 'cookie_path', '/cookie' );
ini_set( 'use_only_cookies', '1' );
     
 session_start();


die ini_set dinger hab ich neu eingefügt, der Rest war schon da...

wie muss denn der Befehl richtig aussehen?
 
So sollte es gehen
wink.gif
, ich würde es aber selber nur ungerne mit der ini_set-Funktion zusammen benutzen. Wenn es mit On nicht klappt, versuch es mal mit einer 1 zu ersetzen. <edit>Nach dem PHP-Manual müsste der Wert 1 sein, um diese Option zu aktivieren. Ach ja, der Webhoster muss Dir natürlich erlauben, diese Werte zu ändern und diese Funktion aufzurufen</edit>
CODE
if ( preg_match('/googlebot/i', $_SERVER['HTTP_USER_AGENT']) ) {
  ini_set( 'session.use_only_cookies', '1' );
}



Eine Andere Möglichkeit wäre es, seine eigene Session-Abhandlung zu schreiben, wenn es mit den PHP-Sessions nicht anderes klappen sollte.
happy.gif




MfG Sascha Ahlers
 
QUOTE (Stefan Brinkers @ Fr 14.10.2005, 10:01) die Frage sollte auch viel mehr heißen:
sind sessions wirklich soooo schlecht - für Suchmaschinen - ?
smile.gif


Der Nachteil ist wohl, dass gleiche Inhalte mit unterschiedlichen Session-IDs, also unterschiedlichen URLs indiziert werden. Für die Suchmaschinen bedeutet dies Duplicate Content.
 
QUOTE Ach ja, der Webhoster muss Dir natürlich erlauben, diese Werte zu ändern und diese Funktion aufzurufen


kann ich das in der phpinfo oder so sehen, oder muss ich dazu meinen hoster fragen?

hab jetzt nämlich versucht mit


CODE <?php
session_cache_limiter('private, must-revalidate');
session_save_path('ses');

ini_set( 'session.cookie_path', '/cookie' );
ini_set( 'session.use_only_cookies', '1 bzw. On' );

session_start();


die Cookies für alle Pflicht zu machen, hat aber auch nicht funktioniert...
aber wieso funktioniert dann "session_save_path('ses');"?
und wieso heißt das nicht "ini_set( 'session.save_path', 'ses' );"??
 
würd ich so machen:
- session immer starten.
- prüfen ob der User ein Gast ist.
- Wenn Gast dann:
http://php.benscom.com/manual/de/function....ewrite-vars.php

weiss aba nicht 100% ob das funktioniert weil ich es selber noch nicht produktiv getestet habe. Aber nach kleineren Tests sah das ganz gut aus.

Einziger Nachteil ist eben das ein Gast der Cookies aus hat bei jedem Refresh als neu betrachtet wird. User können Cookies aber aus haben, bei dennen Funktioniert das ja.
 
QUOTE (Stefan Brinkers @ Fr 14.10.2005, 11:16)[...] kann ich das in der phpinfo oder so sehen, oder muss ich dazu meinen hoster fragen? [...]
die Cookies für alle Pflicht zu machen, hat aber auch nicht funktioniert...
aber wieso funktioniert dann "session_save_path('ses');"?
und wieso heißt das nicht "ini_set( 'session.save_path', 'ses' );"??

Das müsste innerhlab der phpinfo sichtbar sein. Es kann gut sein, dass die ini_set Funktion abgestellt wurde und der Server sollte eigentlich im safe_mode laufen.
Hier eine Liste, welche Varibalen sich überhaupt verändern lassen: http://de.php.net/manual/en/ini.php#ini.list


Vielleicht musst Du auch noch session.use_cookies auf 1 setzen, sollte es aber standardgemäß sein.


QUOTE (Stefan Brinkers @ Fr 14.10.2005, 11:16)[...] die Cookies für alle Pflicht zu machen, hat aber auch nicht funktioniert...
aber wieso funktioniert dann "session_save_path('ses');"?
und wieso heißt das nicht "ini_set( 'session.save_path', 'ses' );"??

Nun, dann scheint diese Funktion wohl deaktiviert zu sein, Du könntest es höchsten nochmal den Punkt durch einen Unterstrich ersetzen (Beispiel: session_save_path).



MfG Sascha Ahlers
 
so, erstmal danke für die ganzen Antworten.

obwohl "session.use_only_cookies" PHP_INI_ALL ist hats nicht funktioniert.
habe alle hier beschriebenen Varianten ausprobiert.

Allerdings bin ich auf eine andere Lösung gestoßen:
Wenn man in der htaccess folgendes hinzufügt:
"php_flag session.use_trans_sid off"
funktionierts scheinbar.

wobei mir der Unterschied von use_trans_sid und use_only_cookies nicht so ganz klar ist.
wahrscheinlich könnte ich auch "php_flag session.use_only_cookies on" in die htaccess schreiben, weiß allerdings nicht was besser ist??

 
QUOTE (Stefan Brinkers @ Fr 14.10.2005, 12:42)[...] wahrscheinlich könnte ich auch "php_flag session.use_only_cookies on" in die htaccess schreiben, weiß allerdings nicht was besser ist??

Ich denke das tut sich nichts..., doch denke ich, ist session.use_trans_sid off wohl die bessere Lösung ist.
Nur wenn du es über htaccess macht, musst Du auch irgendwie den USER_AGENT kontrollieren, sonst kannst Du auch gleich innerhalb von PHP die Session in ein Cookie speichern.


session.use_trans_sid bestimmt, ob die SID per URL übertragen werden darf oder nicht.

session.use_only_cookies bestimmt, ob nur Cookies verwendet werden dürfen oder auch andere Methoden.



MfG Sascha Ahlers

PS: Bin ich froh, nicht mit den PHP-Sessions arbeiten zu müssen...
 
QUOTE irgendwie den USER_AGENT kontrollieren


gibts irgendwo ne gute anleitung zur htaccess, ich finde nur passwortschutz und mod_rewrite Seiten.

würde mich nämlich interessieren ob sowas funktioniert:
wenn USER_AGENT == irgendeine Suchmaschine -> dann "php_flag session.use_trans_sid off"
 
QUOTE (Stefan Brinkers @ Fr 14.10.2005, 13:14) [...] gibts irgendwo ne gute anleitung zur htaccess, ich finde nur passwortschutz und mod_rewrite Seiten. [...]

Hallo,

Du suchst auch etwas falsch, .htaccess ist mehr ein Produkt vom Apache Webserver, darum solltest Du in die Dukomentation [1] schauen. Was letztenendlich funktioniert, liegt an den Server Einstellungen für HTACCESS.



MfG Sascha Ahlers

[1] Apache 2.0 Dokumentation
 
thx!

mit dem user_agent problem bin ich noch nicht weitergekommen, dafür bin ich - wo ich gerade dabei war
smile.gif
- mit modrewrite angefangen...


QUOTE
RewriteEngine on
Options +FollowSymlinks
RewriteBase /

RewriteRule ^(.*)\.htm$ index.php?todo=$1


is das etwa alles was ich machen muss? habe gedacht das wäre umständlicher
rolleyes.gif
 
Ich hätte aber eine Idee, schau Dir mal speziell <IfDefine> und BrowserMatch an.


Ich stelle mir das in etwa so vor:
CODE <IfDefine BrowserMatch "Googlebot" GOOGLE="Yes">
   php_flag session.use_trans_sid off
</IfDefine>


Wenn das nicht funktioniert, geht es vielleicht so. Muss halt mal etwas ausprobieren. Schick aber mal bitte die Lösung, wenn Du sie hast, das interessiert mich nun etwas.

CODE BrowserMatch "Googlebot" GOOGLE="Yes"
<IfDefine GOOGLE>
  php_flag session.use_trans_sid off
</IfDefine>


Zum Testen kannst Du ja statt "Googlebot" "MSIE" oder ähnliches nehmen.



MfG Sascha Ahlers

PS: Achte beim BrowserMatch auf die entsprechende Groß- und Kleinschreibung, msie wird er vermutlich nicht entdeckten, außer bei einen gefälschten Benutzeragenten.
 
hab das was vorgeschlagen hast und die folgenden mal probiert... hat aber alles nicht funktioniert...
sad.gif


komisch, dabei siehts irgendwie richtig aus
laugh.gif


CODE
SetEnvIf HTTP_USER_AGENT "MSIE" MSIE



CODE
BrowserMatch "MSIE" MSIE



CODE
SetEnvIf BrowserMatch "MSIE" MSIE


jeweils in Kombination mit:

CODE
<IfDefine MSIE>
php_flag session.use_trans_sid off
</IfDefine>

 
QUOTE (Stefan Brinkers @ Fr 14.10.2005, 17:03)hab das was vorgeschlagen hast und die folgenden mal probiert... hat aber alles nicht funktioniert...
sad.gif


komisch, dabei siehts irgendwie richtig aus
laugh.gif

[...]

Hallo,

ich habe es nun mal selber ausprobiert und daraufhin Nachgeschlagen:


QUOTE <IfDefine [!]Parameter>

Die eingeschlossenen Anweisungen werden nur ausgeführt, wenn der angegebene Parameter mit der Befehlszeilen-Option -D spezifiziert wurde [...]

Also könnte man in der Form noch länger rumprobieren, dass wird so leider nicht funktionieren, mir fällt sonst auch keine Lösung auf die Schnelle ein. In meinen kleinen Nachschlagewerk finde ich bisher auch nichts hilfreiches mehr.



MfG Sascha Ahlers
 
Zurück
Oben