El SID es el Identificador Único de Sesión, es el "dato" que relaciona los datos que tienes en tu servidor (en un archivo físico) con el "cliente" que los creó y que le pertenecen. Por eso es un "ID" único y aleatorio (que no se repite o no debe) ni que sea "facil" de "componer" para tomar una sesión válida arbitráriamente.
El "SID" se -debe- propagar entre el cliente-servidor .. puede ser por el URL (como es el caso que presentas) o por cookies. Cookies que en ese caso sería PHP quien las crea y gestiona para este caso concreto si así se le dice a PHP que lo haga por configuración:
(php.ini)
session.use_trans_sid = OFF (desactivar la propagación del SID en el URL re-escribiendo ciertos tágs HTML que se definien en url_rewrite_tags = ...)
session.use_cookies= ON (decir a PHP que genere la cookie para propagar el SID)
session.use_only_cookies = ON (forzar propagación del SID sólo en cookies)
Por seguridad, deberías propagar el SID en cookies, esto requiere que tu cliente (navegador) acepte la cookie que PHP va a crear. Esto trae problemas en los clientes que no las aceptan (pero eso es cosa tuya avisar de este hecho a tus usuarios). Propagar el SID en el URL puede traer problemas de seguridad.
En esa línea de código que presentas tienes vários problemas.
1) NO uses $PHP_SELF .. usa los arrays superglobales $_SERVER para acceder a variables de servidor:
$_SERVER['PHP_SELF']
2) SID (Identificador Único de Sesión) en tu contexto no es una variable sino una constante .. por ende NO lleva el $ delante:
Código PHP:
<form action="<?=$_SERVER['PHP_SELF']."?".SID?>" method="post">
Personalmente si tuviera que propagar el SID manualmente en tu formulario por el URL lo haría en un campo hidden y no como lo haces:
Código PHP:
<input type="hidden" name="<?=session_name();?>" value="<?=session_id()?>">
Un saludo,