2009-07-23 4 views
1

PHP 사용하기. 현재 데이터베이스에서 데이터를 탐색하고 가져 오기 위해 쿼리 문자열을 사용하는 작은 응용 프로그램이 있습니다. 데이터베이스의 키도 문자열에 있으며 더 이상 허용되지 않습니다. 나는 그것을 바꿀 필요가있다. 나는 db 키를 숨기고 그것을 대신하는 세션을 사용하고 싶습니다만 어떻게해야하는지 모르겠습니다. 사실, 쿼리 문자열에는 세션을 사용할 수있는 다른 변수가 있습니다.쿼리 문자열 대신 세션을 사용하는 방법

page.php은? VAR1 & VAR2 & ID = 1

이 내 문자열 모습입니다. 나는 데이터베이스에서 결과를 반복하고 각 행에 ID를 부여하여 사용자가 원하는 행을 클릭 할 때 세션에서이 작업을 수행 할 수 있는지 확신 할 수 없도록합니다.

누구에게 아이디어가 있습니까?

감사

편집 : 보낸 사람과받는 사람이 점점 메일을 보내는 곳 나는 이메일 타입 시스템을 개발하고 있어요. 서버에 저장된 각 메일에는 고유 한 키가 있습니다. 현재이 번호를 사용하여 메시지를 확인하고 있지만 문제는 사람들이 번호를 변경하고 다른 사람의 메일을 읽지 못하게하는 것입니다. 아마도이 또는 심지어 일종의 해시 GUID를 사용할 수 있지만 긴 쿼리 문자열을 정말 싫어. 나는 이드를 모두 "숨기"위한 방법이 있다면 훨씬 더 청결 할 것이라고 생각했습니다.

+1

메일 클라이언트를 만드는 것이 끔찍한 방법입니다. 하지만, 여기 내 대답이다. –

답변

3

업데이트] (다시 ... 그래, 나도 알아.)는 $ _GET 매개 변수를 통해 특정 데이터 세트에 대한 액세스를 허용

응용 프로그램을 사용하는 일이 모든 사용자에게 훨씬 더 접근 할 수 있습니다.

개인 기록 키를 저장하기위한

업데이트, 당신은 아마 포스트 데이터를 사용하려는거야, 당신은 정말 링크처럼 보이게하려는 경우, 당신은 항상 그 부분에 대한 CSS를 사용할 수 있습니다.

솔직히 다른 사람의 메일을 읽지 못하게하는 가장 좋은 방법은 X 사람 만이 Y 전자 메일 (ID로)에 액세스 할 수 있다는 관계 테이블을 작성하는 것입니다. 또는 이메일의 '소유자'가 누구인지 밝히는 필드가 있어야합니다.

사용자는 여전히 POST 매개 변수에 액세스 할 수 있으며 자신의 POST 매개 변수를 쉽게 위조 할 수 있습니다. 즉, 이름 지정 체계를 알고 있다면 누구나 다른 사람의 이메일에 실제로 액세스 할 수 있습니다.

이상적인 시스템에서는 보낸 사람과받는 사람이 있습니다 (받는 사람은 쉼표로 구분 된 값일 수 있음). 해당 열 중 하나에있는 사람 만 전자 메일에 액세스 할 수 있어야합니다.


)

우선으로 session_start을 (호출로 시작 (이전부터) 세션을 사용하는 방법, 그리고 이전의 스크립트의 변수가 확인 후. 존재하지 않으면 생성하십시오. 그들이 있다면, 잡아서 사용하십시오.

session_start(); 

if(!isset($_SESSION['db_key'])) 
{ 
    $_SESSION['db_key'] = // generate your database key 
} 
else 
{ 
    $db_key = $_SESSION['db_key']; 
} 

세션은 $ _SESSION 배열에 저장됩니다.$ _SESSION을 사용할 때마다 session_start() FIRST을 호출 한 다음 원하는 항목을 할당하거나 잡을 수 있습니다.

데이터를 제거하려면 session_destroy();를 호출하십시오.

또한 PHP에 $ _SESSION을 사용하는 방법에 대한 몇 가지 예제가 있습니다 Sessions

+0

안녕하세요 Chacha102. 손을 가져 주셔서 감사합니다. 데이터베이스 키는 항상 존재하며 기본적으로 데이터를 보는 데 사용됩니다. 그래서, 만약 내가 foreach를 사용하여 HTML 폼의 행을 나열한다면, 일반적으로 사용자가 클릭 할 수있는 링크가 포함됩니다. 사용자에게 적절한 데이터 행을 표시하려면 해당 데이터베이스 키를 링크에 포함시켜야합니다. 나는이 코드를 어떻게 사용할 수 있는지 보지 못했다. 내가 잘못? –

+0

데이터베이스 키가 사용자 호출이나 개별 호출과 일치합니까? 의미 : 사용자가 특정 행에 묶여 있습니까? –

+0

사용자가 항상 동일한 레코드를보아야하는 경우 해당 레코드 키를 SESSION에 저장하고 링크에 포함시키지 않고 세션에 저장하면되므로 사용자가 해당 페이지로 이동할 때마다 동일한 데이터가 표시됩니다 . –

1

귀하의 질문은 나에게 너무 명확하지 않다,하지만 난 이런 식으로 이해 :

당신은 페이지에 표시되는 내용을 결정하기 위해 몇 가지 변수가 필요합니다. 이 변수는 URL에 전달됩니다. 지금까지는 너무 좋았고 완벽했습니다. 이제이 변수를 숨기고 세션에서 저장하려고합니다.

이것을 고려하십시오. 지금은 모든 페이지마다 고유 한 URL이 있습니다.

http://mysite.com/page?var1=x&var2=y 

은 고유 한 페이지를 표시합니다. 위 URL을 방문 할 때마다 동일한 페이지가 표시됩니다. 내가 제대로 이해한다면 당신이 요구하는지 무엇

은 변수없이

http://mysite.com/page 

같은 하나 개의 URL을 사용하면서도 여전히 다른 페이지를 얻을 수 있습니다? 확실히 가능합니다.하지만 이는 사용자가 서버에서 수행중인 작업을 추적해야 함을 의미합니다. 나는. "사용자가 '다음 페이지'를 클릭하면 마지막으로 X 페이지에 있었기 때문에 X 페이지에 있었으므로 다음 번에 사이트를 요청할 때 페이지 Y를 표시합니다.

많은 작업이 필요하며 사용자가 뒤로 버튼을 사용하기 시작하면 상황이 빨리 어색해질 수 있습니다. 나는 이것이 좋은 생각이라고 생각하지 않는다.

URL에서 중요한 정보를 가져와야 할 경우, 어딘지 모르게 난독 화 (해시)하거나 자체적으로 의미가없는 대체 값을 사용하십시오.

물론 사용자가 여러 페이지에 걸쳐 데이터를 축적하는 경우 응용 프로그램에 따라 세션이 완전히 달라질 수 있습니다. 앱이하는 일에 대해 좀 더 설명 할 수 있습니까?

편집 :, 그에게 길을 잘못

하지만 문제는 내가 당신의 주요 관심사는 보안의 경우 사람들이 다른 사람의 메일

을 수를 변경하고 읽을 수 없다이다입니다

어쨌든 해. 모호함을 통한 보안은 효과가 없을 것입니다. 올바른 ID를 추측하지 않고 사용자가 정보를 표시하기 전에 특정 정보를 볼 수 있는지 여부를 명시 적으로 확인해야합니다.

+0

나는 당신이 좋은 생각이 아니라고 생각한다. 나는 지금 그것을보기 시작했다. 너는 내가하려고 한 것을 이해했다. :) 도와 주셔서 감사합니다. 위의 정보를 더 게시 할 예정입니다. 사람들이 조금 더 나은 것을 이해하는 데 도움이 될 수 있습니다. –

+0

upvote 그리고 어쩌면 내 대답을 받아 들일 수도 멋질 것입니다. :-P – deceze

+0

다시 한번 감사드립니다. 나는 현재 메시지를 보려고하는 사용자가 실제로 소유자가 아니라는 것을 확인하기 위해 점검 중이며 오류 메시지를받습니다. 그게 잘 작동하지만 난 그냥 q 문자열을 가능한 멀리 제거 싶었어요. 이미 귀하의 답변에 투표를 시도했지만 등록하라고 알려줍니다. :/ –

0

S $ _GET 또는 $ _POST 대신 세션을 사용하여 문제가 발생하면 세션에 저장할 수 있도록 사용자의 입력을 읽을 수있는 방법이 필요합니다. 페이지를 새로 고칩니다. 전통적인 방법은 하이퍼 링크 (hyperlinks)를 사용하는 것입니다. 하이퍼 링크는 기본적으로 GET (자바 스크립트를 사용하지 않는 한) 또는 폼 (기본값은 POST)입니다.

아마 아약스가 도움이 될 것입니다.사용자가 양식이나 체크 박스에 정보를 입력하면 JS를 사용하여 정보를 PHP에 삽입하고 정보를 다시 보내야합니다. 페이지를 새로 고치거나 내용을 채우는 것입니다.

희망 하시겠습니까?

+0

안녕하세요, 엑스트라 군, 도와 줘서 고마워. 당신의 권리와 그것이 내가 끊어지는 곳입니다. 양식에 데이터를 표시하는 방법을 모르지만 게시 할 때 숨 깁니다. AJAX는 해결책이지만 절대적으로 js를 전혀 알지 못합니다. 내가 할 수있는 일을 좋아하지만, 과거에 너무 많은 시간을 낭비하여이 앱에서 사용하지 않기로 결정했습니다. –

관련 문제