2017-03-15 1 views
4

Ich versuche Session-ID mit Session-ID() zu erhalten; Aber ich werde erfahren, dass es alle 5 Minuten regeneriert wird.Erhalten Sie eindeutige Session-ID in Code-Signierer

So bekam ich einen Trick, um Zufallszahl in eine benutzerdefinierte Sitzungsvariable zu setzen. wie,

$uniqueId = uniqid(rand(), TRUE); 
$this->session->set_userdata("my_session_id", md5($uniqueId)); 

Jetzt Frage ist, wo sollte ich diesen Code platzieren. Wenn ich diesen Code in den Konstruktor meines Controllers platziere, wird er bei jeder Anfrage ausgeführt. und gibt mir für jede Anfrage eine andere Session-ID.

Wie kann ich diese Sitzungsvariable nur einmal setzen? und es wird sich nicht ändern, bis die Session zerstört wird().

+1

am Login-Controller, wenn Sie Benutzer nach erfolgreichem Login umleiten und Daten in Ihrer Sitzung speichern –

+0

Aber ich möchte auch Gast-Benutzer eine Session-ID zuweisen. –

+0

http: // Stapelüberlauf.com/questions/13945603/how-does-codeigniters-sess-Zeit-zu-Update-Arbeit, könnte dies helfen –

Antwort

0

In der config.php die unten, dann müssen Sie nicht über Ihre eigene Session-ID

$config['sess_expiration'] = 0;//Session does not expire 
$config['sess_time_to_update'] = 0;//Disable session ID regeneration 

In Ihrem Controller erzeugen Sie __construct()

public function __construct(&$params){ 
    // DO NOT forget this 
    parent::__construct($params); 
} 

Dann brauchen werden, wenn Sie holen Sie sich die Sitzung, die Sie

$this->session->userdata('id'); 
+0

Ich kann diese Zeit einstellen, aber was jetzt passiert. Ich bekomme $ session_id = session_id(); in der Funktion des Konstruktors. Im Idealfall sollte jedes Mal, wenn diese Funktion ausgeführt wird, die $ Session-ID gleich bleiben. Aber es wird bei jedem Funktionsaufruf geändert. Wie löst man das? –

+0

Siehe meine aktualisierte Antwort – theEUG

1

In Ihrem constructor chec verwenden würde, k zunächst, ob Sitzung already set or not .Wenn Sitzung nicht dann set it anders gesetzt do nothing .Mögen dies ..

$uniqueId = uniqid(rand(), TRUE);//generates random number 
if(!$this->session->has_userdata('my_session_id'))//if session is not set then it sets (if your session has already value then this step will be skip out) 
{ 
$this->session->set_userdata("my_session_id", md5($uniqueId)); 
} 
+0

bei jeder Anfrage Steuerung geht nach innen, wenn Bedingung, und setzt Wert zurück. Ich kann nicht verstehen, warum es falsch gibt has_userdata ('my_session_id') ?? und führt if-Anweisungen –

+0

irgendeine Idee aus, warum es my_session_id Variable zurücksetzt? –

+3

Es ist besser, '$ uniqueId = uniqid (rand(), TRUE);' inside if;) – ICE

2
  1. Es ist besser zu Session ID regenerieren zu verhindern, dass gegen Session Hijacking. Deaktivierung der Sitzungs-ID-Regeneration ist schlecht Idee. lesen Sie When and why I should use session_regenerate_id()? für weitere Informationen.

  2. Wenn Sie den Benutzer nach Sitzung identifizieren möchten, ist es nicht gut Idee, Sitzungs-ID zu verwenden.

  3. Sie können die Benutzer-ID für die Sitzung festlegen und diese als Identifikation für die Anmeldung verwenden. Für mehr Sicherheit können Sie eine zufällige Zeichenfolge als Schlüssel für die Datenbank speichern und für die Sitzung festlegen. Bei der Überprüfung können Sie die Benutzer-ID und den Schlüssel in der Sitzung mit der Benutzer-ID und dem Schlüssel in der Datenbank vergleichen.

  4. Wenn Sie das gleiche für Gast-Clients haben möchten, können Sie tun, was ich in # 3 erwähnte und speichern $_SESSION['guest']=USER_IP und erstellen Sie eine Gast-Tabelle in der Datenbank, die Gast-IP speichert. und Wenn isset($_SESSION['guest']) Gast Tabelle statt Benutzer Tabelle überprüfen.

  5. Wenn Sie Ihre Sitzung gegen XSS schützen möchten, können Sie andere Benutzerinformationen wie IP speichern und das am Anfang Ihres Codes überprüfen.

-1

die Nutzung php in Funktion gebaut:

$session_id = session_id(); 

jetzt $session_id ist eine eindeutige Session-ID.

Verwandte Themen