2017-01-18 8 views
-2

Die Benutzer auf meiner Website haben eine Homepage mit allen Details, auf die Sie über die URL zugreifen können. Alle Details werden mit einer Sitzungsvariablen gesammelt, sodass keine Variablen an die URL übergeben werden, aber das möchte ich nicht.Hinzufügen einer SESSION-Variable zu einer URL

Die URL sieht wie folgt aus

http://localhost/account/users

ich es wie dieses

http://localhost/account/users/$_SESSION["username"]

zum Beispiel

http://localhost/account/users/ethan

will ich aussehen weiß, dass dies mit $_GET getan werden kann, aber wie würde ich das mit einer Sitzungsvariablen tun? Die Variable in der URL würde nichts tun, was nur für Looks da wäre.

+0

Share-Code, wo Sie URL erstellen? – C2486

+0

Ich bin mir nicht sicher, was du meinst, derzeit verlinke ich direkt zu http: // localhost/account/users – EthanLewis

+0

Sie müssen 2 Dinge tun: 1. In dem Code, wo Sie die URL behandeln, ignorieren Sie den Teil nach '/ Benutzer/', wie es nur kosmetischen ist, und 2. in dem Code, wo Sie die URL generieren, fügen Sie den Namen des Benutzers hinzu. Wir können Ihnen nicht helfen, wenn Sie nicht den Code zeigen, wo Sie diese 2 Dinge tun. – Nanne

Antwort

0

Aus Ihrer Frage ist nicht ganz klar, was Sie wollen, daher spalte ich meine Antwort.

Einstellung des Session-Variable von URL

Soweit ein Ich weiß, gibt es keine direkte Möglichkeit Session-Variablen von einer URL zu setzen. Dies würde das gesamte Sitzungskonzept als serverseitige Daten beeinträchtigen, auf die nur durch eine Sitzungs-ID Bezug genommen wird.

Angenommen, Sie haben ein Skript users.php. Sie könnten im Grunde http://[...]/account/users.php?username=[...] anrufen. Mit dem folgenden Skript können Sie die Variable $_GET superglobal der $_SESSION superglobal zuweisen.

<?php 
    session_start(); 
    $_SESSION['username'] = $_GET['username'] 
    [...] //whatever you'll want to do 
?> 

Mit URL umschreibt Sie die URL zu http://[...]/account/users/[...] vereinfachen könnte.

Wie auch immer, Sie sollten sicherstellen, dass Sie wissen, was Sie tun. Ich sehe die Vorzüge von $_SESSION hier nicht, wenn Sie den Benutzernamen trotzdem weitergeben. Und Sie möchten möglicherweise eine Eingabe Validierung durchführen. Dies sollte keinen Zugriff auf Ressourcen ermöglichen, auf die der jeweilige Benutzer Zugriff haben sollte.

Zeigen Sie einfach ein Benutzer Seite

Wenn Sie würde nur Seite einen Benutzer zeigen möchten, dass Sie nicht wirklich die $_SESSION superglobal brauchen, aber nur die $_GET in der Art, wie ich oben geschrieben habe. Betrachten Sie das folgende Skript

<?php 
    $user = get_user_by_name($_GET['username']); 
    display_user_page($user); 
?> 

Keine Notwendigkeit für eine Sitzung. Laden Sie einfach die Benutzerdaten aus der Datenbank und drucken Sie die Benutzerseite aus.

Vorbei an den Benutzername auf eine URL

Basierend auf diesem Zitat

Die Variablen in der URL nicht alles tun würden, wäre es für die Optik nur da sein.

Ich denke, das ist eher, was Sie tun möchten.Und wie Sie diese Art erreichen können, hängt davon ab.

Wenn Sie den Link irgendwo in Ihrem PHP-Skript generieren, ist das ganz einfach. Fügen Sie einfach die $_SESSION['username'] der URL in der Verknüpfung hinzu und erstellen Sie die entsprechende Rewrite-Regel, die Sie an account/users umleitet.

Es ist etwas komplizierter, wenn Sie http://[...]/account/users anrufen und den Browser auf http://[...]/account/users/username verschieben können. Zuerst müssen Sie eine Rewrite-Regel haben, die http://[...]/account/users/username auf eine Art von http://[...]/account/users.php?username=username zeigt. Wenn der Benutzername leer ist, erhalten Sie den aktuellen Benutzernamen von $_SESSION, erstellen Sie einen <meta http-equiv="refresh" content="0; URL=http://[...]/account/users/$username"> Tag, um den Browser auf die richtige Adresse zu verweisen. Wenn der Benutzername nicht leer ist, zeigen Sie nur die Benutzerseite an.

Ich weiß, dass dies mit $ _GET getan werden kann, aber wie würde ich das mit einer Sitzungsvariablen tun?

Da die Variable überhaupt nicht verwendet wird, könnte man die ganze Sache ohne die $_GET überhaupt einsetzen. Sie werden zwei Skripte haben

// users_redirect.php 
<?php 
    start_session(); 
    $username = $_SESSION['username']; 
    echo "<meta http-equiv='refresh' content='0; URL=http://[...]/account/users/$username'>"; 
?> 

und die zweite der Seite Benutzer zeigen

<?php 
    $user = get_user_by_name($_SESSION['username']); 
    display_user_page($user); 
?> 

Natürlich werden müssen Sie die richtige URL Rewrite-Regeln haben in Ihrem Server einrichten die anrufen korrekte Skripte.

nur eine Randnotiz

Sie sollten die verschiedenen Konzepte auswendig lernen. GET und SESSION sind nicht nur verschieden, sondern grundverschieden. Es sieht so aus, als ob du hier ziemlich viel durcheinander gebracht hättest und du solltest die Grundlagen richtig haben, um die Dinge nicht total zu vermasseln.

Verwandte Themen