89

在代码隐藏中,我设置Session了一些数据。

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

问题是如何在 javascript 中获取 Session 值(在我的示例中;“示例数据”)并设置Session["usedData"]新值?

4

18 回答 18

65

使用 Javascript 访问和分配会话变量:

使用 Javascript 分配 ASP.NET 会话变量:

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

使用 Javascript 访问 ASP.NET 会话变量:

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

        var username = '<%= Session["UserName"] %>';
        alert(username );
    }
</script>
于 2013-11-27T07:38:44.237 回答
27

您不能Session直接在 JavaScript 中访问。

您可以创建一个隐藏字段并将其传递给您的页面,然后使用 JavaScript 通过以下方式检索对象document.getElementById

于 2013-03-20T09:18:50.603 回答
15

Javascript 不能直接设置会话值。为了从 javascript 设置会话值,我执行 ajax 调用如下。

在线查询

在 ASPx 文件或 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()
     } );
   });

 });

在服务器端,

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

如 Shekhar 和 Rajeev 所说,用于获取会话值

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

希望这可以帮助。

于 2014-09-23T14:16:34.113 回答
14

试试这个

var sessionValue = '<%=Session["usedData"]%>'
于 2013-03-20T09:18:35.203 回答
11

假设你的意思是“客户端 JavaScript”——那么你不能,至少不能直接。

会话数据存储在服务器上,因此客户端代码在不与服务器通信的情况下无法看到它。

要访问它,您必须发出 HTTP 请求并让服务器端程序修改/读取并返回数据。

于 2013-03-20T09:19:19.737 回答
5

为代码隐藏文件中的隐藏字段赋值。在你的 javascript 中访问这个值,就像一个普通的 HTML 控件一样。

于 2013-03-20T09:19:10.403 回答
2

您不能从Javascript. 如果要执行此操作,则需要创建一个AJAX POST以在服务器上更新此内容,但如果选择汽车是一项重大事件,则发布此内容可能更容易

于 2016-04-11T11:38:11.107 回答
2

首先在后面的代码中创建一个方法来设置会话:

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

然后从客户端调用它:

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

您应该将 EnablePageMethods 设置为 true:

<asp:ScriptManager EnablePageMethods="true" ID="MainSM" runat="server" ScriptMode="Release" LoadScriptsBeforeUI="true"></asp:ScriptManager>
于 2016-07-29T08:02:53.060 回答
2

如果您想在 javascript 中读取会话值。此代码对您有帮助。

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

于 2017-11-15T08:26:41.490 回答
1

我一直在寻找这个问题的解决方案,直到我找到了一个非常简单的访问会话变量的解决方案,假设您在服务器端使用 .php 文件。希望它能回答部分问题:

访问会话值

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

编辑:下面更好的示例,您可以在 phpfiddle.org 上的“代码空间”选项卡上尝试

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

设置会话值

将它传递给您可能想要的任何变量。例如,

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

这应该可以,但没有测试过。

于 2015-11-26T21:50:01.243 回答
1

您还可以在属性中设置变量并从 js 中调用它:

在服务器端:

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

然后在javascript中:

alert("The wasFieldEdited Value: <%= wasFieldEditedStatus %>" );
于 2016-02-03T19:45:55.743 回答
1

这是作弊,但你可以这样做,将值作为参数发送到服务器端

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

并从服务器端检索参数

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

希望这可以帮助

于 2017-07-03T10:23:10.247 回答
1

要在创建页面后从服务器修改会话数据,您需要使用 AJAX 甚至 JQuery 来完成工作。它们都可以与服务器建立连接以修改会话数据并从该连接中获取返回的数据。

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

现在我们需要创建一个名为 modifySession.php 的小 php 脚本来更改会话数据并在必要时将数据发回。

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

这应该通过使用 PHP/AJAX 通过服务器端修改会话来实现您正在寻找的预期结果。

于 2018-05-12T19:34:56.090 回答
1

这对我有用。Javascript有这个。

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

后面的 C# 代码有这个 - 它可以放在母版页上,因此它会在页面更改时重置 var。

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

将此代码添加到按钮单击以确认部门名称已更改。

alert(deptname);
于 2019-07-31T15:50:10.677 回答
0

我使用我的 .php 文件将 required 放入会话中

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

在我使用的 .js 文件中

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

我用

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

在其他 .js 文件或相同的 .js 文件中

如果我保持原样,即使您注销,它也会始终返回相同的结果。所以在注销时我做了

sessionStorage.setItem("名称", "");

使用这个我清空了局部变量。我在单页网站登录/注销会话中使用了这个过程。我希望这种方式对你有用,因为它对我有用。请让我知道你的经历。

于 2018-03-14T07:22:43.357 回答
0

我能够通过简单的 URL 参数和自动刷新来解决类似的问题。

您可以从 URL 参数中获取值,对它们做任何您想做的事情,然后简单地刷新页面。

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");
}
于 2019-02-20T15:22:05.177 回答
-1
<?php
    session_start();
    $_SESSION['mydata']="some text";
?>

<script>
    var myfirstdata="<?php echo $_SESSION['mydata'];?>";
</script>
于 2020-10-03T04:13:52.093 回答
-1

这种方法可能有一些里程。这似乎将日期返回到会话变量。它返回的字符串显示 javascript 日期,但是当我尝试操作该字符串时,它会显示 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);'
于 2020-11-16T00:21:20.963 回答