web-dev-qa-db-fra.com

Comment accéder aux variables de session et les définir en javascript?

Dans le code-behind, j'ai défini Session avec des données.

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

Et la question est de savoir comment puis-je obtenir la valeur Session (dans mon exemple, "échantillon de données") en javascript et définir Session["usedData"] avec une nouvelle valeur?

67
Mehmet Ince

Accès et affectation de la variable de session à l'aide de Javascript:

Affectation de la variable de session ASP.NET à l'aide de Javascript:

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

Accéder à la variable de session ASP.NET en utilisant Javascript:

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

        var username = '<%= Session["UserName"] %>';
        alert(username );
    }
</script>
56
SHEKHAR SHETE

Vous ne pouvez pas accéder à Session directement en JavaScript.

Vous pouvez créer un champ caché et le transmettre à votre page, puis utiliser JavaScript pour récupérer l'objet via document.getElementById.

19
Darren

Javascript ne peut pas définir directement les valeurs de session . Pour définir les valeurs de session à partir de javascript, j'appelle ajax comme suit.

Vérifiez en ligne

Au fichier ASPx ou 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()
     } );
   });

 });

Côté serveur,

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"] ?? "";
      }
 }

Pour obtenir des valeurs de session, comme dit par Shekhar et Rajeev

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

J'espère que cela t'aides.

11
Ganesh

Essaye ça

var sessionValue = '<%=Session["usedData"]%>'
11
Rajeev Kumar

En supposant que vous parliez de "JavaScript côté client", vous ne pouvez pas, du moins pas directement.

Les données de session sont stockées sur le serveur. Par conséquent, le code côté client ne peut pas les voir sans communiquer avec le serveur.

Pour y accéder, vous devez faire une requête HTTP et demander à un programme côté serveur de modifier/lire et de renvoyer les données.

7
Quentin

Attribuez une valeur à un champ masqué dans le fichier code-behind. Accédez à cette valeur dans votre javascript comme un contrôle HTML normal.

4
btevfik

Vous ne pouvez pas définir les variables de session côté session à partir de Javascript. Si vous voulez faire cela, vous devez créer un AJAXPOSTpour le mettre à jour sur le serveurbien que, si la sélection d’une voiture soit un événement majeur, il pourrait être plus facile dePOST ce.

2
Mohaimin Moin

Vous pouvez également définir la variable dans une propriété et l'appeler depuis js:

Du côté du serveur:

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

Et puis dans le javascript:

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

Je cherchais une solution à ce problème, jusqu'à ce que je trouve une solution très simple pour accéder aux variables de session, en supposant que vous utilisiez un fichier .php côté serveur. J'espère que cela répond à une partie de la question:

valeur de la session d'accès

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

Edit: meilleur exemple ci-dessous, que vous pouvez essayer sur phpfiddle.org, dans l'onglet "codespace"

<!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>

définir la valeur de session

transmettez-lui une variable de ce que vous voudrez peut-être. par exemple,

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

Cela devrait fonctionner, mais pas testé.

1
Matthieu

commencez par créer une méthode dans code behind pour définir la session:

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

puis appelez-le du côté client: 

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

vous devez définir EnablePageMethods sur true:

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

Si vous voulez lire la valeur de la session en javascript.Ce code vous aidera.

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

1
Chandan Rajbhar

Voici ce qui a fonctionné pour moi. Javascript a ceci.

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

Le code C # situé derrière a ceci - il pourrait être placé sur la page principale afin qu'il soit réinitialisé à chaque changement de page.

        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);
        }

Ajoutez ce code à un clic de bouton pour confirmer le nom dept modifié.

alert(deptname);
0
code-it

J'ai pu résoudre un problème similaire avec des paramètres d'URL simples et un rafraîchissement automatique.

Vous pouvez obtenir les valeurs à partir des paramètres d'URL, en faire ce que vous voulez et simplement actualiser la page.

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");
}
0
Rui Ruivo

Pour modifier les données de session du serveur après la création de la page, vous devez utiliser AJAX ou même JQuery pour effectuer le travail. Les deux peuvent établir une connexion avec le serveur pour modifier les données de session et récupérer les données renvoyées par cette connexion.

<?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>

Nous devons maintenant créer un petit script php appelé modifySession.php pour modifier les données de session et les restituer si nécessaire.

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

Cela devrait permettre d’obtenir les résultats souhaités en modifiant la session via serveur via PHP/AJAX.

0
shader2199

j'ai utilisé mon fichier .php pour mettre requis dans les sessions

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

dans mon fichier .js j'ai utilisé 

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

et j'ai récupéré cela en utilisant

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

dans d'autres fichiers .js ou dans les mêmes fichiers .js

si je le garde tel qu'il est, il reviendra même à tout moment, même si vous êtes déconnecté. donc en me déconnectant j'ai fait

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

en utilisant cela, j'ai vidé la variable locale. J'ai utilisé ce processus lors de sessions de connexion/déconnexion de sites Web d'une seule page. J'espère que cela fonctionnera pour vous parce que cela a fonctionné pour moi. SVP faites-moi savoir vos expériences. 

0
Srinivasa Reddy

Ceci est une triche, mais vous pouvez le faire, envoyez la valeur à sever side en tant que paramètre

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

Et du côté serveur, récupérez le paramètre

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

j'espère que cela t'aides

0
KMR