"" Nedir?

7 Cevap php

Ben PHP için yeni duyuyorum. PHP dili öğrenme yolunda, ben fark, bazı web sitesi URL bu tür olur:

www.website.com/profile.php?user=roa3 & ...

Benim sorular:

  1. "" Nedir? sembol için kullanılan?

  2. Ben bir php web sitesi geliştirmek olsaydı, benim URL kullanmak gerekir? Bir kullanıcı (roa3) başarılı giriş yaptıktan sonra, örneğin, yerine "www.website.com / profile.php" nin "www.website.com/profile.php?user=roa3" yönlendirme olacak

  3. Bunu kullanarak avantajları ve dezavantajları nelerdir?

7 Cevap

İyi sorular, kısaca,

  1. "?" stands for the start of querying string which contains the data to be passed to the server. in this case you are passing user=roa3 to profile.php page. You can get the data by using $_GET['user'] within profile.php. querystring is one of the methods to send data to the server from client agent. The other one places the data in HTTP body and POST to the server, you don't see the HTTP POST data directly from browser.

  2. querystring can be edited by user and it is visible to the public. If www.website.com/profile.php?user=roa3 is intended to be public then it is fine, otherwise you may want to use session to get current user's context.

  3. it is a flexible way to pass data to the server, but it is visible and editable to the users, for some sensitive data, at least produce some kind of hash before attaching it to the querystring, this prevents users to edit it or understanding the meaning of it. However this doesn't prevent a decent hacker to do something wrong about your website. Different browsers support different max length of URL, the lengthy URL is made up by those querystring parameters. If you want to send large amount of data, place the data in the HTTP body and POST to the server.

Gerçekte bu dil özgü olmadığı zaman ben şimdiye kadar gördüğüm cevapların çoğu PHP bakımından olmuştur. Şimdiye kadar verilen cevaplar size bilgi sonraki bir dilde farklılık erişmek için kullanmak istiyorsunuz PHP ve yöntemleri görünümünden olmuştur, ancak veri (Query String olarak da bilinir) URL olduğu biçiminde kalır aynı (Ör:? page.ext anahtarı1 = değer & anahtar2 = değer & ...).

Ben teknik arka plan ya da bilgi biliyorum, bu yüzden lütfen beni affet bilmiyorum ...

Geri web sunucusuna veri sağlamak için bir web sayfası için iki farklı yöntem vardır. Bunlar POST olarak bilinen veya GET yöntemlerini edilir. Orada da başkalarının demet, ama normal bir kullanıcı ile uğraşırken olanların hiçbiri web tasarım her türlü kullanılmalıdır da. GET yöntemi URL sorgu dizesi olarak kullanıcıya görünür ve sadece kelimenin tam anlamıyla bilgi 'almak' anlamına ise POST yöntemi, sunucuya görünmez gönderilir ve 'yükleme' veri içindir.

Tüm siteler başparmak bu kuralı uygulayın, ama neden olarak nedenler olabilir. Örneğin, bir site proxy sunucularından veya tarayıcınız tarafından önbelleğe almak için sadece POST kullanabilirsiniz, ya da çünkü kodlama dönüşüm bir GET gerçekleştirmek için çalışırken onlar çift bayt dillerini kullanma ve sorunlara neden olabilir çünkü.

Bazıları iki yöntemleri hakkında kaynakları ve bunları kullanmak için zaman ...

http://www.cs.tut.fi/~jkorpela/forms/methods.html http://weblogs.asp.net/mschwarz/archive/2006/12/04/post-vs-get.aspx http://en.wikipedia.org/wiki/Query_string

Şimdi kesinlikle PHP pozisyonda bir web sayfası sunucuya geri gönderdi bilgi almak için kullanabileceğiniz 3 farklı diziler şimdi vardır. Senin emrinde var ...

  • $ _POST ['Keyname'], bir POST yöntemi yalnızca bilgi kapmak için
  • $ _GET ['Keyname'], bir GET yöntemi yalnızca bilgi kapmak için
  • Eğer POST kapmak GET ve teslim edilmiş olabilecek COOKIE bilgi sağlamak için $ _REQUEST ['keyname']. Özellikle bir sayfa veri göndermek için kullanıyor olabilir hangi yöntemi bilmiyorum durumlarda herkesi kucaklayan Sıralama.

$ _REQUEST Yöntemi ile doğrudan giderek özensiz alamadım. Ben $ _REQUEST değişkeni için yukarıda bahsedildiği gibi bir durum yoksa, o zaman kullanmayın. Bunu güvenlik söz konusu olduğunda bir 'hepsi inkar ve sadece izin x, y, z' yaklaşım denemek ve kullanmak istiyorum. Sadece kendi sitesi kullanmadan önce sadece bekliyor olacak kombinasyonları için bakmak, ve tüm bilgileri temizlemek, gönderme olacak biliyorum verileri arayın. Örneğin ..

  • Yukarıdaki yöntemlerle geçti şey üzerinde bir eval () Asla. Ben bu yapılır görmedim, ama insanlar hiç denemedim demek ya da yapmaz.
  • Onları temizlik olmadan veritabanları ile doğrudan bilgiyi asla kullanmayın (SQL enjeksiyon saldırıları içine araştırma onlara aşina değilseniz)

Bu kadar değil, sonu tüm PHP güvenlik için-bütün olacak, ama biz bunun için burada değiliz. Eğer hat boyunca daha fazla bilgi edinmek istiyorsanız, iyi o SO için başka bir soruydu.

Umarım bu yardımcı olur ve herhangi bir soru sormak için çekinmeyin.

1) sitenize bir kullanıcı günlükleri, bunun yerine url örneğin profile.php?username=roa3 içinde geçirmeden orada adı saklamak için Sessions kullanmak istiyorsunuz

URL'ler içinde 2) kullanarak ? sembolü genelde Search Engine Optimization için kötü olarak kabul edilir. Ayrıca, adresler biraz çirkin görünüyor. mod_rewrite Eğer profile.php?user=roa3 veya products.php?id=123&category=toys ile aynı şeyi yapabilirsiniz kullanma: site.com/profile/roa3 veya products/toys/123.

CodeIgniter çerçevesini kullanarak varsayılan olarak size dostu URL'ler vermek ve adresler de ? s ihtiyacını ortadan kaldıracaktır. this page bir örnek için bkz.

3) ? sembolü de bir php sayfa kodu içinde kullanılır. Örneğin, bir if else blok örneğin,

if ($x==1)
   $y=2;
else
   $y=3;

: olarak da yazılabilir

$y=($x==1) ? 2 : 3;

"?" Bazı GET değişkenleri takip etmek olduğunu belirtir. Örneğin "kullanıcı" olarak adlandırılan bir değişken kullanır ve "roa3" adında bir değişken atar.

GET değişkenleri kullanmanın avantajları:

  • Onlar URL parçası olarak işaretlenebilir

Dezavantajları

  • onlar Herkes bu bilgi önünü ve görebilirsiniz .. halk vardır. Bu url istekler bile yolculuk boyunca sunucuları tarafından önbelleğe alınır. Yani herkes sadece elle bu bilgileri yazarak ... Ayrıca farklı bir kullanıcıya roa3 değiştirmek ve onları taklit verebilecek roa3 kullanıcıyı taklit edebilir ..

You can also use a "&" symbol to separate many variables e.g.: www.website.com/profile.php?user=roa3&fav_colour=blue

Diğer seçenekler:

  • POST değişkenleri

    • Sen POST değişkenler aracılığıyla değişkenleri gönderebilirsiniz. Bu değişkenler talebi değil, talep url başlığında geçirilir. onlar hemen belirgin değildir, ve teh yolculuk boyunca sunucuları tarafından önbelleğe değil, ama yine de okunabilir. Eğer kurulan bir HTTPS conection yoksa.
    • bir form değişkenleri POST ile gönderilen veya GET yöntemlerini olabilir .. Sen formun "yöntemi" Bu belirtin. <form action="index.php" method='post'/>
  • OTURUM değişkenler

    • Session variables are stored on the server. A session id is passed to the user, and this session id is passed back to the server every time the user makes another request. This session id can then be used to get the session variables that were stored. So you could store a user's favorite colour, their name, and ip address etc.. but you could store it on teh server rather than the user's home PC.
      Session ids can be impersonated, so it is good to check against the user's IP, and or to wrap them in a secure conection. eg https.
    • oturum değişkenleri isteği yakalanan biri tarafından değiştirilemez.
  • COOKIE variable:
    Similar to the session variables, except that they are stored on the user's PC, not the server. They are stored against a domain, and when they go to that domain, they resubmit the variables in the header of the request to the server.. this means that the user could change and hack the variables, or someone else could.

Kullanabilirsiniz php bu değişkenleri erişmek için:

  • $x = $_GET['user'] get değişkeni için
  • $x = $_POST['user]
  • $x = $_REQUEST['user'] - get, yazılan ve çerez değişkenlerin kombinasyonu
  • $x = $_COOKIE['user'] - çerez değişkenleri
  • $x = $_SESSION['user'] oturum değişkenleri erişmek için

(user kullandığınız değişkenin adı ile değiştirilmelidir olabilir)

Aslında ne bilmek yeterli şeyler basit, ama önemli.

? HTTP standart bir parçası olup PHP bir parçasıdır. Eğer başka bir dile geçmek ve ilgili PHP orada karışık düşünce değildir tekrar görünce ben böylece işaret gerektiğini düşündüm.

Aksi takdirde yukarıda bazı mükemmel cevaplar vardır.

, Bakış sunucunun noktasından? sadece başka bir karakter. PHP sonra URL parçaları için kolay yöntemler sağlar? karakteri, mesela "/ profile.php? kullanıcı = roa3" için, PHP $ _GET ['user'] = 'roa3' koyacaktır.

Nedeni? URL'ler yararlıdır tarayıcılar formları kullanarak dinamik URL'leri inşa olabilir - durumunda yukarıda, ben URL insan kullanıcı "roa3" yazmış olduğu bir alan "kullanıcı" ile bir HTTP formu, tarafından inşa edilmiş olduğunu beklenebilir.

  1. "?" URL ve parametreleri ayırmak için kullanılır. Örneğin için, http://www.url.com/resourcepath?a=b&c=d gibi. Bu durumda a = b = request_parameter request_value gibidir.

  2. Ya, toplam url boyutu sınırlıdır ve GET tüm parametreler url gösterilir istek ve kullanıcı gibi çünkü parametreler kadar kullanmak Onun tavsiye edilmez değiştirebilirsiniz. Bir kullanıcı url için "kullanıcı = techmaddy 'değiştirirseniz ne olur senin örnekte, söylüyorlar.

  3. Advantage bu istekleri GET tür için kullanılabilir olduğunu. Dezavantajı düşük güvenlik, sınırlama boyutu olduğunu.