セッション変数にアクセスしてJavaScriptで設定するにはどうすればよいですか?


83

コードビハインドではSession、いくつかのデータを設定しました。

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

そして問題は、JavaScriptでセッション値(私の例では「サンプルデータ」)を取得Session["usedData"]し、新しい値を設定するにはどうすればよいですか?


3
ASP.NetMVCかWebformsかを明記してください。MVCの場合は、javascriptに直接アクセスできます。Webフォームの場合は、一時的にViewStateの[]に追加することができます
Fendy

WebFormsを使用していますが、Session変数にアクセスして値を設定できないのはなぜですか?
Mehmet Ince 2013

1
WebFormsにあまり詳しくはありませんが、WebFormのSessionに直接アクセスするのは私にとって初めてのことです(ただし、これはおそらく悪い習慣です)。セッションはサーバー側(webserver / iis)にあり、javascriptはクライアント側(ブラウザー)にあります。セッションで変更をトリガーするには、Webサーバーへの特定のリクエストが必要です。つまり、ajax(より簡単な実装のためのjQuery)とWebサービスを使用して、javascriptからセッションを更新できます。
フェンディ2013

回答:


60

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>

6
正確にコードを試してみましたが、コードでアクセスしたときに得られる出力は+ userName +
Rajshekar Reddy 2014

23
この答えはうまくいきません。SetUserNameメソッドを呼び出しても、サーバーを呼び出してSessionオブジェクトにアクセスすることはありません
mcintyre321 2014

3
答えはまだ機能していませんそれは賛成を得ています。答えを確認する必要があると思います
Heemanshu Bhalla

1
@HeemanshuBhalla実際の答えは、アクセス部分が魅力のように機能するため、賛成票を獲得することです。ただし、割り当て部分はチェックしていません。
アフマドマレキ

4
「アクセス」部分は機能します。ただし、大きな注意点:ページの作成時に1回だけ割り当てられます。サーバーは、JavaScriptをレンダリングするときに値を割り当てます。pagelaad()を使用して部分的なポストパックでJavaScriptを再実行できますが、ポストバックが変更された場合、新しいsessionVariableはJavaScriptに割り当てられません。古いものを再利用するだけです。
DaniDev 2016年

27

SessionJavaScriptで直接アクセスすることはできません。

非表示のフィールドを作成してページに渡し、JavaScriptを使用してオブジェクトを取得できます。 document.getElementById


3
真実ではありません、あなたは試験で覚えていますか?JSのsessionStorage;)。
mattytommo 2013年

ハハ-ユーザーがページに戻った場合に備えて、localStorageの質問を受けました!;)
ダレン

このアプローチには、ユーザーがブラウザー開発ツールを使用して非表示フィールドの値を簡単に変更できるため、リスクがあります。
アフマドマレキ2016

4
@ AhmadM-そのため、サーバーでも検証します。これを行うと、間接的なオブジェクト参照攻撃を防ぐことができます。
ダレン

13

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

お役に立てれば。


12

これを試して

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

おかげで、それはうまくいきます:)しかし、私はセッション値も設定したいのですが、これは可能ですか?
Mehmet Ince

@MehmetInce、セッション値を設定するには、投稿を介してサーバーに値を送信するか、サーバーにリクエストを処理させます。ajaxを介してこのリクエストを実行することを妨げるものは何もありません。
Ash Burlaczenko 2013年

1
@AshBurlaczenkoこのサンプル例を投稿してください。それは大いに役立つでしょう
Rajeev Kumar

1
しかし、Javascriptを使用してセッション変数にどのように値を割り当てますか?
SHEKHAR SHETE 2013年

10

あなたが「クライアントサイドJavaScript」を意味すると仮定すると、少なくとも直接ではありません。

セッションデータはサーバーに保存されるため、クライアント側のコードはサーバーと通信しないとデータを確認できません。

これにアクセスするには、HTTPリクエストを作成し、サーバー側のプログラムでデータを変更/読み取り、返す必要があります。


直接アクセスできない場合、私の怠惰なチャンスはhttpリクエストを使用することです:(
Mehmet Ince

4

コードビハインドファイルの非表示フィールドに値を割り当てます。通常のHTMLコントロールのように、JavaScriptでこの値にアクセスします。


簡単にアクセスできる良い点ですが、コードのセキュリティに大きな問題があります。ユーザーは、ChromeのdevToolなどのツールを使用してアカウントのユーザー/アクセスを巧妙に変更し、アクセスレベルで許可されていないことを実行できます
StudioX 2010年

2

からセッション側のセッション変数を設定することはできませんJavascript。これを実行したい場合は、サーバー上でこれを更新するAJAX POSTを作成する必要がありますが、車の選択が主要なイベントである場合は、これをPOSTする方が簡単な場合があります。


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>

2

javascriptでセッション値を読み取りたい場合。このコードは役に立ちます。

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


1

プロパティに変数を設定して、jsから呼び出すこともできます。

サーバー側:

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

そして、JavaScriptで:

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

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;

これは機能するはずですが、テストはしていません。


おそらく「キー」を置き換えるのを忘れたでしょう
Matthieu

こんにちは@Matthieuポスターはphpセッションではなくasp.netセッションについて尋ねています
SHEKHAR SHETE 2016

私の悪い投稿を削除する必要がありますか?
マシュー2016

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;

お役に立てれば


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を使用してサーバー側でセッションを変更することにより、探している望ましい結果が得られるはずです。


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

このコードをボタンクリックに追加して、deptnameが変更されたことを確認します。

alert(deptname);

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( "name"、 "");

これを使用して、ローカル変数を空にしました。私はこのプロセスを単一ページのWebサイトのログイン/ログアウトセッションで使用しました。それが私のために働いたので、私はこの方法があなたのために働くことを願っています。plzはあなたの経験を教えてくれます。


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

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

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

提供された回答は低品質としてフラグが立てられました。答える方法
GuilhermeLemmi20年

-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);'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.