2013-07-04 4 views
1

나는 다음과 같은 메소드를 사용하여 ASMX 웹 서비스가 : 내가 AJAX를 사용하여 클라이언트 측에서이 메서드를 호출 할 때 세션 ID가 (영문 페이지 및 웹 서비스) 동일하게 유지왜 SessionID가 다른가요?

[WebMethod(Description = "Test", EnableSession = true)] 
public string DoWork(string param) 
{ 
    string user = Session["user"].ToString(); 
} 

,하지만 난이를 호출 할 때 (버튼 클릭 이벤트에서) 세션 ID가 변경됨 :

ServiceReference1.MyServiceSoapClient obj = new ServiceReference1.MyServiceSoapClient(); 
string user=Session["user"]; 
obj.DoWork("Test string"); 

왜 SESSIONID가 변경 되나요? 어떻게 둘 다 동일하게 유지합니까?

답변

2

어디에서 전화를했는지 생각해 보셨습니까? 서버 측 호출에서는 서버에서 호출하는 것이므로 새로운 세션이 생성되는 반면, 다른 경우에는 동일한 클라이언트 측이 사용되므로 세션이 변경되지 않습니다.

그림이 좀 더 명확하게 필요하면 웹 서비스 관점에서 살펴보십시오. 어떤 경우에는 클라이언트가 웹 브라우저이고 다른 경우에는 클라이언트 자체가 다르므로 SessionID를 변경해야합니다.


아마 일부 데이터가, 그렇지 않으면 당신이 원하는만큼 공유 할 수 있도록 허용 할 수 있습니다 전달 될 수있는 웹 서비스에 매개 변수를 추가하는 것이 좋습니다 것, 서버 자체를 조회 할 수있는 좋은 이유가 가정 세션을 공중 납치하는 능력이 있어야합니다.


웹 서비스 및 영문 페이지가 동일한 서버, 다음 웹 서비스가 액세스 어떤 기능, 웹 페이지의 뒤에 코드에서 직접 액세스 할 수 있습니다합니다. 웹 서비스의 "DoWork"메서드의 로직을 웹 페이지와 웹 서비스 모두에서 액세스 할 수있는 DLL에 넣을 수 있으며 동일한 클라이언트가 SessionID에 제공되기 때문에 SessionID를 변경하지 않아도됩니다. 의뢰.

+0

괜찮 았네, 그럼 내가 어떻게 똑같이 유지할 수 있니? – user1390378

+1

@ user1390378 서버가 외부 대면 API로 설계된 SOAP 호출을 통해 자체 코드를 호출하게 만드는 이유는 무엇입니까? 코드가 이미 서버 측에서 실행중인 경우 의도 한 함수를 직접 호출하지 않는 것이 좋습니다. – MerickOWA

+0

@MerickOWA : 어떻게 할 수 있습니까? – user1390378

관련 문제