Wie greife ich auf Sitzungsvariablen zu und setze sie in Javascript?

81

Im Code-Behind habe ich Sessionmit einigen Daten gesetzt.

Session["usedData"] = "sample data";

Und die Frage ist, wie ich den Sitzungswert (in meinem Beispiel "Beispieldaten") in Javascript abrufen und Session["usedData"]mit einem neuen Wert festlegen kann.

Mehmet Ince
quelle
3
Bitte geben Sie an, ob es sich um ASP.Net MVC oder Webforms handelt. Bei MVC können Sie direkt auf Javascript zugreifen. Wenn Webformulare, können Sie vorübergehend zu ViewState []
Fendy
Ich verwende WebForms. Warum kann ich nicht auf die Sitzungsvariable zugreifen und einen Wert festlegen?
Mehmet Ince
1
Nicht zu weit in WebForms hinein, ist es für mich neu, direkt auf die Sitzung in WebForm zuzugreifen (obwohl dies höchstwahrscheinlich eine schlechte Praxis ist). Die Sitzung befindet sich auf der Serverseite (Webserver / iis) und Javascript auf der Clientseite (Browser). Sie benötigen eine spezielle Anfrage an den Webserver, um Änderungen während der Sitzung auszulösen. Kurz gesagt, Sie können die Sitzung mithilfe von Ajax (jQuery für eine einfachere Implementierung) und dem Webservice von Javascript aus aktualisieren.
Fendy

Antworten:

61

Zugreifen auf und Zuweisen der Sitzungsvariablen mit Javascript:

Zuweisen der ASP.NET-Sitzungsvariablen mit Javascript:

 <script type="text/javascript">
function SetUserName()
{
    var userName = "Shekhar Shete";
    '<%Session["UserName"] = "' + userName + '"; %>';
     alert('<%=Session["UserName"] %>');
}
</script>

Zugriff auf die ASP.NET-Sitzungsvariable mit Javascript:

<script type="text/javascript">
    function GetUserName()
    {

        var username = '<%= Session["UserName"] %>';
        alert(username );
    }
</script>
SHEKHAR SHETE
quelle
6
Ich habe versucht, Sie genau zu codieren und die Ausgabe, die ich bekomme, wenn ich in meinem Code darauf zugreife, ist die Ausgabe+ userName +
Rajshekar Reddy
23
Diese Antwort wird nicht funktionieren. Das Aufrufen der SetUserName-Methode ruft den Server nicht auf, um auf das Sitzungsobjekt
zuzugreifen
3
Die Antwort funktioniert nicht, es werden immer noch positive Stimmen abgegeben. Ich denke, die Antwort muss überprüft werden
Heemanshu Bhalla
1
@ HeemanshuBhalla Eigentlich ist die Antwort, Stimmen zu bekommen, weil der Zugriffsteil wie ein Zauber wirkt. Ich habe den Zuweisungsteil jedoch nicht überprüft.
Ahmad Maleki
4
Der Teil "Zugriff" funktioniert. Aber GROSSE Einschränkung: Es wird nur einmal bei der Seitenerstellung zugewiesen. Der Server weist den Wert beim Rendern des JavaScript zu. Sie können das JavaScript in einem Teil-Postpack mit pagelaad () erneut ausführen. Wenn sich Ihr Postback ändert, wird die neue sessionVariable nicht dem JavaScript zugewiesen. Es wird nur das alte wiederverwenden.
DaniDev
27

Sie können nicht Sessiondirekt in JavaScript zugreifen .

Sie können ein verstecktes Feld erstellen, es an Ihre Seite übergeben und dann mithilfe von JavaScript das Objekt über abrufen document.getElementById

Darren
quelle
2
Nicht wahr, erinnerst du dich an die Prüfung? sessionStorage in JS;).
Mattytommo
Haha - Ich habe die localStorage-Frage - nur für den Fall, dass der Benutzer zur Seite zurückkehrt! ;)
Darren
Dieser Ansatz birgt das Risiko, dass der Benutzer den Wert des ausgeblendeten Felds mit Browser-Entwicklertools leicht ändern kann.
Ahmad Maleki
4
@AhmadM - deshalb validieren Sie auch auf dem Server. Auf diese Weise wird ein indirekter Objektreferenzangriff verhindert.
Darren
13

Javascript kann Sitzungswerte nicht direkt festlegen. Um Sitzungswerte aus Javascript festzulegen, rufe ich Ajax wie folgt auf.

Online prüfen

Bei ASPx-Datei oder HTML,

 <script type="text/javascript">
 $(function(){
   //Getting values from session and saving in javascript variable.
   // But this will be executed only at document.ready.
   var firstName = '<%= Session["FirstName"] ?? "" %>';
   var lastName = '<%= Session["LastName"] ?? "" %>';

   $("#FirstName").val(firstName);
   $("#LastName").val(lastName);

   $('Button').click(function(){
     //Posting values to save in session
     $.post(document.URL+'?mode=ajax', 
     {'FirstName':$("#FirstName").val(),
     'LastName':$("#LastName").val()
     } );
   });

 });

Auf der Serverseite

protected void Page_Load(object sender, EventArgs e)
 {
      if(Request.QueryString["mode"] != null && Request.QueryString["mode"] == "ajax")
      {
        //Saving the variables in session. Variables are posted by ajax.
        Session["FirstName"] = Request.Form["FirstName"] ?? "";
        Session["LastName"] = Request.Form["LastName"] ?? "";
      }
 }

Um Sitzungswerte zu erhalten, wie von Shekhar und Rajeev gesagt

var firstName = '<%= Session["FirstName"] ?? "" %>';

Hoffe das hilft.

Ganesh
quelle
12

Versuche dies

var sessionValue = '<%=Session["usedData"]%>'
Rajeev Kumar
quelle
danke, das funktioniert super :) aber ich möchte auch sitzungswert setzen, ist das möglich?
Mehmet Ince
@MehmetInce, um den Sitzungswert festzulegen, müssen Sie den Wert per Post an den Server senden oder die Anforderung abrufen und vom Server bearbeiten lassen. Nichts hindert Sie daran, diese Anfrage über Ajax zu stellen.
Ash Burlaczenko
1
@AshBurlaczenko Könnten Sie bitte ein Beispiel dafür posten. Es wäre eine große Hilfe
Rajeev Kumar
1
Aber wie werden Sie der Sitzungsvariablen mit Javascript einen Wert zuweisen?
SHEKHAR SHETE
9

Angenommen, Sie meinen "clientseitiges JavaScript" - dann können Sie es nicht, zumindest nicht direkt.

Die Sitzungsdaten werden auf dem Server gespeichert, sodass der clientseitige Code sie nicht sehen kann, ohne mit dem Server zu kommunizieren.

Um darauf zuzugreifen, müssen Sie eine HTTP-Anfrage stellen und die Daten von einem serverseitigen Programm ändern / lesen und zurückgeben lassen.

QUentin
quelle
Wenn ich nicht direkt zugreifen kann, besteht meine Chance darin, die http-Anfrage zu verwenden :(
Mehmet Ince
4

Weisen Sie einem ausgeblendeten Feld in der CodeBehind-Datei einen Wert zu. Greifen Sie wie ein normales HTML-Steuerelement auf diesen Wert in Ihrem Javascript zu.

btevfik
quelle
Ein guter Punkt, um einen einfachen Zugriff zu haben, aber ein großes Problem für die Codesicherheit. Der Benutzer kann seinen Benutzer / Zugriff mit Tools wie devTool in Chrome schwierig ändern und das tun, was seine Zugriffsebene nicht
zulässt
2

Sie können keine sitzungsseitigen Sitzungsvariablen von festlegen Javascript. Wenn Sie dies tun möchten, müssen Sie einen AJAX POST erstellen , um dies auf dem Server zu aktualisieren. Wenn die Auswahl eines Autos ein wichtiges Ereignis ist, ist es möglicherweise einfacher, dies zu POSTEN .

Mohaimin Moin
quelle
2

Erstellen Sie zuerst eine Methode im Code dahinter, um die Sitzung festzulegen:

 [System.Web.Services.WebMethod]
 public static void SetSession(int id)
 {
     Page objp = new Page();
     objp.Session["IdBalanceSheet"] = id;
 }

Rufen Sie es dann vom Client aus auf:

function ChangeSession(values) {
     PageMethods.SetSession(values);
     }

Sie sollten EnablePageMethods auf true setzen:

<asp:ScriptManager EnablePageMethods="true" ID="MainSM" runat="server" ScriptMode="Release" LoadScriptsBeforeUI="true"></asp:ScriptManager>
Behnam
quelle
2

Wenn Sie den Sitzungswert in Javascript lesen möchten. Dieser Code hilft Ihnen.

<script type='text/javascript'> var userID='@Session["userID"]'; </script>

Chandan Rajbhar
quelle
1

Sie können die Variable auch in einer Eigenschaft festlegen und von js aus aufrufen:

Auf der Serverseite:

Protected ReadOnly Property wasFieldEditedStatus() As Boolean
    Get
        Return If((wasFieldEdited), "true", "false")
    End Get
End Property

Und dann im Javascript:

alert("The wasFieldEdited Value: <%= wasFieldEditedStatus %>" );
Aus dem Gold
quelle
1

Ich suchte nach einer Lösung für dieses Problem, bis ich eine sehr einfache Lösung für den Zugriff auf die Sitzungsvariablen fand, vorausgesetzt, Sie verwenden eine .php-Datei auf der Serverseite. Hoffe, es beantwortet einen Teil der Frage:

Zugriff auf Sitzungswert

<script type="text/javascript">        
    var value = <?php echo $_SESSION['key']; ?>;
    console.log(value);
</script>

Bearbeiten: Besseres Beispiel unten, das Sie auf phpfiddle.org auf der Registerkarte "Codespace" ausprobieren können

<!DOCTYPE html>
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <?php
    $_SESSION['key'] = 10;
    $i = $_SESSION['key'];
  ?>
 </head>
 <body>
  <p id="affichage">hello</p>

  <script type="text/javascript">
    var value =  <?php echo $i; ?>;
    $("#affichage").html(value);   
  </script>

 </body>
</html>

Sitzungswert festlegen

Übergeben Sie eine Variable von was auch immer Sie möchten. z.B,

$you = 13;
$_SESSION['user_id'] = $you;

Dies sollte funktionieren, aber nicht getestet.

Matthieu
quelle
Sie haben wahrscheinlich vergessen, 'Schlüssel' zu ersetzen
Matthieu
hallo @Matthieu das Plakat fragt nach asp.net Sitzung nicht für PHP-Sitzung
SHEKHAR SHETE
mein schlechtes sollte ich meinen Beitrag löschen?
Matthieu
1

Dies ist ein Cheat, aber Sie können dies tun, indem Sie den Wert als Parameter an die Server-Seite senden

<script>
var myVar = "hello"
window.location.href = window.location.href.replace(/[\?#].*|$/, "?param=" + myVar); //Send the variable to the server side
</script>

Rufen Sie auf der Serverseite den Parameter ab

string myVar = Request.QueryString["param"];
Session["SessionName"] = myVar;

hoffe das hilft

KMR
quelle
Clever!!! Es klappt!!!! Danke!!
Nikolaos Polygenis
1

Hier ist, was für mich funktioniert hat. Javascript hat dies.

<script type="text/javascript">
var deptname = '';
</script>

Der dahinter stehende C # -Code hat dies - er könnte auf die Masterseite gesetzt werden, sodass var bei jedem Seitenwechsel zurückgesetzt wird.

        String csname1 = "LoadScript";
        Type cstype = p.GetType();

        // Get a ClientScriptManager reference from the Page class.
        ClientScriptManager cs = p.ClientScript;

        // Check to see if the startup script is already registered.
        if (!cs.IsStartupScriptRegistered(cstype, csname1))
        {
            String cstext1 = funct;
            cs.RegisterStartupScript(cstype, csname1, "deptname = 'accounting'", true);
        }
        else
        {
            String cstext = funct;
            cs.RegisterClientScriptBlock(cstype, csname1, "deptname ='accounting'",true);
        }

Fügen Sie diesen Code zu einer Schaltfläche hinzu, um zu bestätigen, dass der Deptname geändert wurde.

alert(deptname);
Code-it
quelle
0

Ich habe meine .php-Datei verwendet, um die erforderlichen in Sitzungen zu setzen

$ _SESSION ['name'] = $ phparray ["name"]; $ ajaxoutput ['name'] = $ phparray ["name"];

in meiner .js Datei habe ich verwendet

sessionStorage.setItem ("name", ajaxreturnedarray ["name"]);

und ich habe dies mit abgerufen

var myName = sessionStorage.getItem ("name");

in anderen .js-Dateien oder in denselben .js-Dateien

Wenn ich es so lasse, wie es ist, wird es immer gleich zurückgegeben, auch wenn Sie sich abgemeldet haben. Also habe ich mich beim Abmelden gemacht

sessionStorage.setItem ("name", "");

mit dieser habe ich lokale Variable geleert. Ich habe diesen Prozess in einseitigen Website-Anmelde- / Abmeldesitzungen verwendet. Ich hoffe, dass dieser Weg für Sie funktioniert, weil er für mich funktioniert hat. Bitte teilen Sie mir Ihre Erfahrungen mit.

Srinivasa Reddy
quelle
0

Um Sitzungsdaten vom Server nach der Seitenerstellung zu ändern, müssten Sie AJAX oder sogar JQuery verwenden, um den Job zu erledigen. Beide können eine Verbindung zum Server herstellen, um Sitzungsdaten zu ändern und zurückgegebene Daten von dieser Verbindung zurückzugewinnen.

<?php
session_start();
$_SESSION['usedData'] = "Some Value"; //setting for now since it doesn't exist
?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Modifying PHP Session Data</title>
        <script type='text/javascript'>
            var usedData = '<?php echo $_SESSION['usedData']; ?>';
            var oldDataValue = null;

            /* If function used, sends new data from input field to the
               server, then gets response from server if any. */

            function modifySession () {
                var newValue = document.getElementById("newValueData").value;

                /* You could always check the newValue here before making
                   the request so you know if its set or needs filtered. */

                var xhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");

                xhttp.onreadystatechange = function () {
                    if (this.readyState == 4 && this.status == 200) {
                        oldDataValue = usedData;
                        usedData = this.responseText; //response from php script
                        document.getElementById("sessionValue").innerHTML = usedData;
                        document.getElementById("sessionOldValue").innerHTML = oldDataValue;
                    }
                };

            xhttp.open("GET", "modifySession.php?newData="+newValue, true);
            xhttp.send(); 
            }
        </script>
    </head>
    <body>
        <h1><p>Modify Session</p></h1>

        Current Value: <div id='sessionValue' style='display:inline'><?php echo $_SESSION['usedData']; ?></div><br/>
        Old Value: <div id='sessionOldValue' style='display:inline'><?php echo $_SESSION['usedData']; ?></div><br/>

        New Value: <input type='text' id='newValueData' /><br/>
        <button onClick='modifySession()'>Change Value</button>
   </body>
</html>

Jetzt müssen wir ein kleines PHP-Skript namens modifySession.php erstellen, um Änderungen an den Sitzungsdaten vorzunehmen und die Daten bei Bedarf zurückzusenden.

<?php
session_start();
$_SESSION['usedData'] = $_GET['newData']; //filter if necessary
echo $_SESSION['usedData']; // Post results back if necessary
?>

Dies sollte die gewünschten Ergebnisse erzielen, indem Sie die Sitzung über den Server mit PHP / AJAX ändern.

shader2199
quelle
0

Ich konnte ein ähnliches Problem mit einfachen URL-Parametern und automatischer Aktualisierung lösen.

Sie können die Werte aus den URL-Parametern abrufen, mit ihnen machen, was Sie wollen, und einfach die Seite aktualisieren.

HTML:

<a href=\"webpage.aspx?parameterName=parameterValue"> LinkText </a>

C #:

string variable = Request.QueryString["parameterName"];
if (parameterName!= null)
{
   Session["sessionVariable"] += parameterName;
   Response.AddHeader("REFRESH", "1;URL=webpage.aspx");
}
Rui Ruivo
quelle
-1
<?php
    session_start();
    $_SESSION['mydata']="some text";
?>

<script>
    var myfirstdata="<?php echo $_SESSION['mydata'];?>";
</script>
Pkde
quelle
Die bereitgestellte Antwort wurde als minderwertig gekennzeichnet. Hier sind einige Tipps zur Beantwortung?
Guilherme Lemmi