세션 변수에 액세스하고 JavaScript로 설정하는 방법은 무엇입니까?


82

코드 숨김 Session에서 일부 데이터로 설정 했습니다.

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

그리고 질문은 어떻게하면 자바 스크립트에서 세션 값 (예 : "샘플 데이터")을 가져 와서 Session["usedData"]새 값으로 설정할 수 있습니까?


3
ASP.Net MVC인지 Webforms인지 명시하십시오. MVC의 경우 javascript에 직접 액세스 할 수 있습니다. 웹 양식 경우 임시의 ViewState []에 추가 할 수 있습니다
Fendy

WebForms를 사용하고 있는데 왜 세션 변수에 액세스하여 값을 설정할 수 없습니까?
Mehmet Ince

1
WebForms를 통하지 않고 WebForm의 Session에 직접 액세스하는 것이 처음입니다 (나쁜 습관 일 가능성이 높음). 세션은 서버 측 (webserver / iis)에 있고 javascript는 클라이언트 측 (브라우저)에 있습니다. 세션에서 변경을 트리거하려면 웹 서버에 대한 특정 요청이 필요합니다. 간단히 말해, ajax (간단한 구현을위한 jQuery) 및 웹 서비스를 사용하여 javascript에서 세션을 업데이트 할 수 있습니다.
Fendy

답변:


61

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
나는 정확히 당신이 코드를 시도하고 내가 내 코드에 액세스 할 때 출력은 I 출력이 얻을+ userName +
Rajshekar 레디

23
이 대답은 작동하지 않습니다. SetUserName 방법은 액세스 세션 개체 서버에 전화를 걸하지 않을 호출
mcintyre321

3
대답은 여전히 ​​작동하지 않습니다. 대답을 검토해야한다고 생각합니다
Heemanshu Bhalla 2016 년

1
@HeemanshuBhalla 실제로 대답은 액세스하는 부분이 매력처럼 작동하기 때문에 upvotes를 얻고 있습니다. 그래도 할당 부분을 확인하지 않았습니다.
Ahmad Maleki

4
"액세스"부분이 작동합니다. 그러나 큰주의 사항 : 페이지 생성시 한 번만 할당됩니다. 서버는 JavaScript를 렌더링 할 때 값을 할당합니다. pagelaad ()를 사용하여 부분 포스트 팩에서 JavaScript를 다시 실행할 수 있지만 포스트 백이 변경되면 새 sessionVariable이 JavaScript에 할당되지 않습니다. 이전 것을 재사용합니다.
DaniDev 2016

27

SessionJavaScript에서는 직접 액세스 할 수 없습니다 .

숨겨진 필드를 만들어 페이지에 전달한 다음 JavaScript를 사용하여 document.getElementById


3
사실이 아니에요, 시험에서 기억나요? JS의 sessionStorage;).
mattytommo 2013 년

Haha-사용자가 페이지로 돌아올 경우를 대비하여 localStorage 질문이 있습니다! )
대런

이 접근 방식은 사용자가 브라우저 개발자 도구를 사용하여 숨겨진 필드의 값을 쉽게 변경할 수 있으므로 위험합니다.
아마드 Maleki

4
@AhmadM-이것이 서버에서도 유효성을 검사하는 이유입니다. 이렇게하면 간접 개체 참조 공격을 방지 할 수 있습니다.
Darren

13

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 2013 년

@MehmetInce, 세션 값을 설정하려면 게시물을 통해 서버에 값을 보내거나 서버가 요청을 처리하도록합니다. ajax를 통해이 요청을 수행하는 것을 막을 수는 없습니다.
Ash Burlaczenko 2013 년

1
@AshBurlaczenko 이에 대한 샘플 예제를 게시 해 주시겠습니까? 그것은 큰 도움이 될 것입니다
라지브 쿠마르

1
그러나 Javascript를 사용하여 세션 변수에 값을 어떻게 할당합니까?
SHEKHAR SHETE 2013

9

"클라이언트 측 JavaScript"를 의미한다고 가정하면 적어도 직접적으로는 불가능합니다.

세션 데이터는 서버에 저장되므로 클라이언트 측 코드는 서버와 통신하지 않고는 볼 수 없습니다.

액세스하려면 HTTP 요청을하고 서버 측 프로그램이 데이터를 수정 / 읽고 반환하도록해야합니다.


직접 액세스 할 수없는 경우 게으른 기회는 http 요청을 사용하는 것입니다. (
Mehmet Ince

4

코드 숨김 파일의 숨겨진 필드에 값을 할당합니다. 일반 HTML 컨트롤처럼 자바 스크립트에서이 값에 액세스합니다.


쉽게 액세스 할 수 있다는 점은 좋지만 코드 보안에 큰 문제가 있습니다. 사용자는 Chrome에서 devTool과 같은 도구를 사용하여 계정 사용자 / 액세스를 까다롭게 변경할 수 있으며 액세스 수준에서 허용하지 않는 작업을 수행 할 수 있습니다
StudioX

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

그리고 자바 스크립트에서 :

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

1

서버 측에서 .php 파일을 사용한다고 가정하고 세션 변수에 액세스하기위한 매우 간단한 솔루션을 찾을 때까지이 문제에 대한 해결책을 찾고있었습니다. 질문의 일부에 답하기를 바랍니다.

액세스 세션 값

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

편집 : "codespace"탭에서 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 포스터는하지 PHP 세션 asp.net 세션에 대한 질문입니다
SHEKHAR SHETE

내 게시물을 삭제해야합니까?
Matthieu

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

여기에 저에게 효과적이었습니다. 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);

0

내 .php 파일을 사용하여 세션에 필수 항목을 넣었습니다.

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

내 .js 파일에서 내가 사용한

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

그리고 나는 이것을 사용하여 검색했습니다.

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

다른 .js 파일 또는 동일한 .js 파일

그대로 유지하면 로그 아웃 한 경우에도 항상 동일하게 반환됩니다. 그래서 로그 아웃하면서

sessionStorage.setItem ( "이름", "");

이것을 사용하여 지역 변수를 비 웠습니다. 단일 페이지 웹 사이트 로그인 / 로그 아웃 세션에서이 프로세스를 사용했습니다. 저에게 효과가 있었기 때문에이 방법이 효과가 있기를 바랍니다. PLZ 당신의 경험을 알려주십시오.


0

페이지 생성 후 서버에서 세션 데이터를 수정하려면 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를 사용하여 서버 측을 통해 세션을 수정하여 원하는 결과를 얻을 수 있습니다.


0

간단한 URL 매개 변수와 자동 새로 고침으로 비슷한 문제를 해결할 수있었습니다.

URL 매개 변수에서 값을 가져 와서 원하는대로 수행하고 페이지를 새로 고칠 수 있습니다.

HTML :

<a href=\"webpage.aspx?parameterName=parameterValue"> LinkText </a>

씨#:

string variable = Request.QueryString["parameterName"];
if (parameterName!= null)
{
   Session["sessionVariable"] += parameterName;
   Response.AddHeader("REFRESH", "1;URL=webpage.aspx");
}


-1

이 접근 방식으로 약간의 마일리지가있을 수 있습니다. 이것은 날짜를 세션 변수로 되 돌리는 것 같습니다. 반환하는 문자열은 자바 스크립트 날짜를 표시하지만 문자열을 조작하려고하면 자바 스크립트 코드가 표시됩니다.

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.