web-dev-qa-db-ja.com

JavaScriptを使用してセッションを作成する方法は?

JavaScriptでセッションを作成する方法は?

私はこのようにしてみます:

<script type="text/javascript" >
{
Session["controlID"] ="This is my session";
}
</script> 

セッションを探しているのはなぜですか?

AJAXを使用してXMLをリクエストします。セッションに保存するXML応答と、このセッションをサーバーページ(.asp)に渡します。私は次のようなものを書くことを意味します:

<% response.write session("MySession")%>
36
Alex

文字列情報をCookieに保存および読み取ることができます。

サーバーからのセッションIDである場合、サーバーはこのCookieを生成できます。また、別のリクエストがサーバーに送信されると、Cookieも送信されます。ブラウザで何もする必要はありません。

ただし、セッションIDを作成するのがjavascriptの場合。次のような関数を使用して、JavaScriptでCookieを作成できます。

function writeCookie(name,value,days) {
    var date, expires;
    if (days) {
        date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        expires = "; expires=" + date.toGMTString();
            }else{
        expires = "";
    }
    document.cookie = name + "=" + value + expires + "; path=/";
}

次に、各ページでこのセッションIDが必要です。次のような関数を使用して、Cookieを読み取ることができます。

function readCookie(name) {
    var i, c, ca, nameEQ = name + "=";
    ca = document.cookie.split(';');
    for(i=0;i < ca.length;i++) {
        c = ca[i];
        while (c.charAt(0)==' ') {
            c = c.substring(1,c.length);
        }
        if (c.indexOf(nameEQ) == 0) {
            return c.substring(nameEQ.length,c.length);
        }
    }
    return '';
}

読み取り関数は、CookieがJavaScriptのページまたはサーバーから作成された場合、それを書き込んだ同じドメインの任意のページまたはタブから機能します。

IDを保存するには:

var sId = 's234543245';
writeCookie('sessionId', sId, 3);

IDを読み取るには:

var sId = readCookie('sessionId')
51
Mic

ASP.NET MVC(C#)を使用していると思われますが、そうでない場合、この回答は問題にありません。

JavaScriptを使用してセッション値を直接割り当てることは不可能ですか?いいえ、それを行う方法があります。

コードをもう一度見てください:

<script type="text/javascript" >
{
Session["controlID"] ="This is my session";
}
</script> 

少し変更:

<script type="text/javascript" >
{
  <%Session["controlID"] = "This is my session";%>
}
</script>

セッション「controlID」が作成されましたが、セッションの値はどうですか?それは永続的ですか、JavaScriptを介して変更できますか?

もう少し変更しましょう:

<script type="text/javascript" >
{
  var strTest = "This is my session"; 
  <%Session["controlID"] = "'+ strTest +'";%>
}
</script>

セッションは作成されますが、セッション内の値は「 '+ strTest +'」であり、「これは私のセッションです」ではありません。次のようなサーバーコードに変数を直接書き込もうとすると:

<%Session["controlID"] = strTest;%>

次に、「現在のコンテキストにはパラメータstrTestがありません...」ページでエラーが発生します。これまでは、JavaScriptを使用してセッション値を直接割り当てることはまだ不可能と思われていました。

今、私は新しい方法に移ります。コードビハインドでWebMethodを使用してそれを行う。少し変更してコードをもう一度見てください。

<script type="text/javascript" >
{
 var strTest = "This is my session"; 
 PageMethods.CreateSessionViaJavascript(strTest);
}
</script> 

分離コードページ。 WebMethodを作成します。

[System.Web.Services.WebMethod]
public static string CreateSessionViaJavascript(string strTest)
{
    Page objp = new Page();
    objp.Session["controlID"] = strTest; 
    return strTest;
}

Webメソッドを呼び出して、javascriptからセッションを作成した後。セッション「controlID」の値は「This is my session」になります。

私が説明した方法を使用する場合は、aspxページのformタグ内にこのコードブロックを追加してください。このコードは、ページメソッドを有効にするのに役立ちます。

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

ソース: JavaScript-JavaScriptでセッションに値を設定する方法

ハッピーコディング、トライ

10
Tri Nguyen Dung

ローカルストレージを使用できます。

ローカルストレージはセッションと同じです。ブラウザを閉じると、データは削除されます。

<script> 
localStorage.setItem('lastname','Smith');

alert(localStorage.getItem('lastname'));
</script>

編集:以下の@Naveenのコメントは正しいです。代わりにセッションストレージを使用できます。 ( https://www.w3schools.com/jsref/prop_win_sessionstorage.asp )ありがとう。

9
Rafael M.

セッションの概念を誤解したと思います。セッションはサーバー側のユーザーデータストアごとのサーバー側であり、サーバー側でユーザーデータを保存できます。

したがって、2つのオプションがあり、Cookieを使用してセッションの錯覚を与えます(ただし、まったく同じではありません)。document.cookieで非常に簡単にCookieにアクセスできます。

ただし、サーバーにセッションを認識させるには、何らかのサーバー要求を使用する必要があります。おそらく、これを行うにはAJAXを使用するのが最善の方法です。

セッションの定義を読み直すことをお勧めします。

9
MindFold
function writeCookie(name,value,days) {
    var date, expires;
    if (days) {
        date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        expires = "; expires=" + date.toGMTString();
            }else{
        expires = "";
    }
    document.cookie = name + "=" + value + expires + "; path=/";
}
1
gaurav

sessionStorageを使用できますが、localStorageに有効期限が設定されていないときにページセッションが終了すると、sessionStorageはクリアになります。

を参照 https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage

1
Rim Gazzah

Jstorage javascriptプラグインを試すことができます。これはセッションを維持するためのエレガントな方法です。これをチェックしてください http://www.jstorage.info/

jStorage.jsスクリプトをHTMLに含めます

<script src="jStorage.js"></script>

次に、javascriptでセッショントークンを次のようなキーに配置します

$.jStorage.set("YOUR_KEY",session_id);

「YOUR_KEY」は、次のように、session_idにアクセスするために使用できるキーです。

var id = $.jStorage.get("YOUR_KEY");
1
Jibin Mathew

Cookieを作成し、有効期限を指定しない場合、セッションの終了時に有効期限が切れるセッションCookieが作成されます。

詳細については、 https://stackoverflow.com/a/532660/1901857 を参照してください。

0
mst

これが私がやったことであり、動作し、PHPでセッションを作成し、xmlhhtprequestを使用して、HTMLページがロードされ、Cordovaで動作するたびにセッションが設定されるかどうかを確認します.

0
James Cluade
<script type="text/javascript">
function myfunction()
{
    var IDSes= "10200";
    '<%Session["IDDiv"] = "' + $(this).attr('id') + '"; %>'
    '<%Session["IDSes"] = "' + IDSes+ '"; %>';
     alert('<%=Session["IDSes"] %>');
}
</script>

リンク

0
mohammad

文字列情報をCookieに保存および読み取ることができます。

サーバーからのセッションIDである場合、サーバーはこのCookieを生成できます。また、別のリクエストがサーバーに送信されると、Cookieも送信されます。ブラウザで何もする必要はありません。

ただし、セッションIDを作成するのがjavascriptの場合。次のような関数を使用して、JavaScriptでCookieを作成できます。

読み取り関数は、CookieがJavaScriptのページまたはサーバーから作成された場合、それを書き込んだ同じドメインの任意のページまたはタブから機能します。

0
Best Dude

name attrを使用できます。

<script type="text/javascript" >
{
window.name ="This is my session";
}
</script> 

使用する形式を自分で開発するか、既存のライブラリ(mootools、Dojoなど)のラッパーを使用する必要があります。

localStorage およびjstorageが最善の策です。 localStorageが組み込まれており、 jstorage は多くの機能を提供します

caniuseでのlocalStorageブラウザーのサポート を参照してください。

0
user6195279