¿Cómo acceder a las variables de sesión y configurarlas en javascript?


82

En código subyacente lo configuré Sessioncon algunos datos.

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

Y la pregunta es ¿cómo puedo obtener el valor de la sesión (en mi ejemplo, "datos de muestra") en javascript y establecerlo Session["usedData"]con un nuevo valor?


3
Indique si es ASP.Net MVC o Webforms. Si es MVC, puede acceder directamente a javascript. Si se trata de formularios web, puede agregarlos temporalmente a ViewState []
Fendy

Estoy usando WebForms, ¿por qué no puedo acceder a la variable de sesión y establecer un valor?
Mehmet Ince

1
No demasiado en WebForms, es nuevo para mí el acceso directo a Session en WebForm (aunque probablemente sea una mala práctica). La sesión está en el lado del servidor (servidor web / iis) y javascript está en el lado del cliente (navegador). Necesita una solicitud específica al servidor web para activar el cambio en la sesión. En resumen, puede actualizar la sesión desde javascript usando ajax (jQuery para una implementación más simple) y servicio web.
Fendy

Respuestas:


61

Acceder y asignar la variable de sesión usando Javascript:

Asignar la variable de sesión ASP.NET usando Javascript:

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

Accediendo a la variable de sesión ASP.NET usando Javascript:

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

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

6
Probé su código exactamente y el resultado que obtengo cuando + userName +
accedo a

23
Esta respuesta no va a funcionar. Invocar el método SetUserName no va a realizar una llamada al servidor para acceder al objeto de sesión
mcintyre321

3
La respuesta no funciona, todavía está recibiendo votos a favor. Creo que la respuesta debe ser revisada
Heemanshu Bhalla

1
@HeemanshuBhalla En realidad, la respuesta es obtener votos positivos porque la parte de acceso funciona a la perfección. Sin embargo, no he comprobado la parte de asignación.
Ahmad Maleki

4
La parte "Acceso" funciona. Pero GRAN advertencia: solo se asignará una vez en la creación de la página. El servidor asigna el valor al renderizar JavaScript. Puede volver a ejecutar JavaScript en un postpack parcial con un pagelaad () pero si su postback cambia, la nueva variable de sesión no se asignará al JavaScript. Solo reutilizará el anterior.
DaniDev

27

No puede acceder Sessiondirectamente en JavaScript.

Puede crear un campo oculto y pasarlo a su página y luego usar JavaScript para recuperar el objeto a través de document.getElementById


3
No es cierto, ¿te acuerdas del examen? sessionStorage en JS;).
mattytommo

Jaja - Recibí la pregunta localStorage - ¡en caso de que el usuario regrese a la página! ;)
Darren

Este enfoque tiene un riesgo, ya que el usuario puede cambiar fácilmente el valor del campo oculto con las herramientas de desarrollo del navegador.
Ahmad Maleki

4
@AhmadM: por eso también valida en el servidor. Hacer esto evitará un ataque de referencia de objeto indirecto.
Darren

13

Javascript no puede establecer valores de sesión directamente. Para configurar los valores de sesión desde javascript, hago una llamada ajax de la siguiente manera.

Revisa en linea

En el archivo ASPx o 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()
     } );
   });

 });

En el lado del servidor,

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

Para obtener valores de sesión, como dijeron Shekhar y Rajeev

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

Espero que esto ayude.


12

Prueba esto

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

gracias, eso funciona muy bien :) pero también quiero establecer el valor de la sesión, ¿es esto posible?
Mehmet Ince

@MehmetInce, para establecer el valor de la sesión, debe enviar el valor al servidor a través de una publicación u obtener y hacer que el servidor maneje la solicitud. No hay nada que le impida hacer esta solicitud a través de ajax.
Ash Burlaczenko

1
@AshBurlaczenko ¿Podría publicar un ejemplo para esto? Sería de gran ayuda
Rajeev Kumar

1
Pero, ¿cómo asignarás valor a la variable de sesión usando Javascript?
SHEKHAR SHETE

9

Suponiendo que te refieres a "JavaScript del lado del cliente", entonces no puedes, al menos no directamente.

Los datos de la sesión se almacenan en el servidor, por lo que el código del lado del cliente no puede verlos sin comunicarse con el servidor.

Para acceder a él, debe realizar una solicitud HTTP y hacer que un programa del lado del servidor modifique / lea y devuelva los datos.


Si no puedo acceder directamente, mi última oportunidad es usar http request :(
Mehmet Ince

4

Asignar valor a un campo oculto en el archivo de código subyacente. Acceda a este valor en su javascript como un control HTML normal.


un buen punto para tener un acceso fácil pero un gran problema para la seguridad del código, el usuario puede cambiar el usuario / acceso de su cuenta usando herramientas como devTool en Chrome y hacer lo que no está permitido por su nivel de acceso
StudioX

2

No puede establecer variables de sesión del lado de la sesión desde Javascript. Si desea hacer esto, debe crear un AJAX POST para actualizarlo en el servidor, aunque si la selección de un automóvil es un evento importante, podría ser más fácil POSTARlo .


2

primero cree un método en el código subyacente para configurar la sesión:

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

luego llámalo desde el lado del cliente:

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

debe establecer EnablePageMethods en verdadero:

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

2

Si desea leer el valor de la sesión en javascript, este código le ayudará.

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


1

También puede establecer la variable en una propiedad y llamarla desde js:

En el lado del servidor:

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

Y luego en el javascript:

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

1

Estaba buscando una solución a este problema, hasta que encontré una solución muy simple para acceder a las variables de sesión, asumiendo que usa un archivo .php en el lado del servidor. Espero que responda parte de la pregunta:

valor de la sesión de acceso

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

Editar: mejor ejemplo a continuación, que puede probar en phpfiddle.org, en la pestaña "espacio de código"

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

establecer valor de sesión

pásale una variable de lo que quieras. p.ej,

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

Esto debería funcionar, aunque no lo probé.


probablemente olvidó reemplazar 'clave'
Matthieu

hola @ Matthieu el cartel pregunta sobre la sesión de asp.net, no para la sesión de php
SHEKHAR SHETE

mi mal ¿debo borrar mi publicación?
Matthieu

1

Esto es una trampa, pero puede hacer esto, envíe el valor al lado del servidor como parámetro

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

Y desde el lado del servidor, recupere el parámetro

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

espero que esto ayude


1

Esto es lo que funcionó para mí. Javascript tiene esto.

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

El código C # subyacente tiene esto: podría colocarse en la página maestra para restablecer var en cada cambio de página.

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

Agregue este código a un clic de botón para confirmar que se cambió el nombre del departamento.

alert(deptname);

0

Usé mi archivo .php para ponerlo en sesiones

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

en mi archivo .js que utilicé

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

y recuperé esto usando

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

en otros archivos .js o en los mismos archivos .js

si lo mantengo como está, volverá igual en todo momento, incluso si se desconectó. así que al cerrar la sesión hice

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

usando esto vacié la variable local. Utilicé este proceso en sesiones de inicio / cierre de sesión de sitios web de una sola página. Espero que esta forma funcione para usted porque funcionó para mí. por favor déjeme saber sus experiencias.


0

Para modificar los datos de la sesión desde el servidor después de la creación de la página, necesitaría usar AJAX o incluso JQuery para hacer el trabajo. Ambos pueden establecer una conexión con el servidor para modificar los datos de la sesión y obtener los datos devueltos de esa conexión.

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

Ahora tenemos que hacer un pequeño script php llamado modifiedSession.php para realizar cambios en los datos de la sesión y publicarlos si es necesario.

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

Esto debería lograr los resultados deseados que está buscando modificando la sesión a través del lado del servidor usando PHP / AJAX.


0

Pude resolver un problema similar con parámetros de URL simples y actualización automática.

Puede obtener los valores de los parámetros de URL, hacer lo que quiera con ellos y simplemente actualizar la página.

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

-1
<?php
    session_start();
    $_SESSION['mydata']="some text";
?>

<script>
    var myfirstdata="<?php echo $_SESSION['mydata'];?>";
</script>

La respuesta proporcionada se marcó como de baja calidad. A continuación se ofrecen algunos consejos sobre cómo responder.
Guilherme Lemmi

-1

Posiblemente algo de kilometraje con este enfoque. Esto parece devolver la fecha a una variable de sesión. La cadena que devuelve muestra la fecha de javascript, pero cuando intento manipular la cadena, muestra el código de javascript.

ob_start();
?>
<script type="text/javascript">
    var d = new Date();
    document.write(d);
</script>
<?
$_SESSION["date"]  = ob_get_contents();
ob_end_clean();
echo $_SESSION["date"]; // displays the date
echo substr($_SESSION["date"],28); 
// displays 'script"> var d = new Date(); document.write(d);'
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.